`

chrome.tabs,与javascript同源策略

阅读更多
一、什么是同源策略

同源策略,是由Netscape提出的一个著名的安全策略,现在所有支持javascript的浏览器都会使用这个策略。

为什么需要同源策略,这里举个例子:

假设在浏览器的一个tab窗口中打开了银行网站,在另外一个tab窗口中打开了一个恶意网站,而那个恶意网站引入了一个javascript脚本。如果没有同源策略,那么这个脚本就可以获取或篡改银行网站上的信息

同源策略是由浏览器来实现的。浏览器在执行一个javascript脚本之前,首先会负责进行“同源检查”,如果javascript和页面不是同源的,浏览器就会拒绝执行这个javascript脚本

二、chrome extension违反了同源策略吗

function click(e) {
	chrome.tabs.executeScript(null, {
		code : "document.body.style.backgroundColor='red'"
	});
	window.close();
}

上述js代码,在点击chrome扩展中的一个按钮时,会改变当前TAB页面里的背景颜色

利用chrome.tabs.executeScript()方法,还可以做很多事情,当然也包括获取document里的信息

看起来,chrome extension违反了同源策略

但是实际上并不是这样,chrome通过2个层面来保证安全

首先chrome扩展是需要通过google审查的,并不是随意发布的,所以比来路不明的javascript安全

其次,在开发chrome extension时,需要在manifest文件中进行权限声明:
"permissions": [
    "tabs",
    "notifications",
    "http://localhost:8080/",
    "http://www.baidu.com/"
]

因此,在用户选择安装这个extensions时,就会给出警告,类似于android上的权限声明机制

所以,chrome extensions并不是违反javascript同源策略的

3、chrome.tabs、chrome.windows、document、window

这几个概念有点混淆,顺便在此澄清一下

document和window是javascript里特有的概念,不是浏览器特有的

window是窗口,document是窗口里加载的文档模型(DOM)

详细的介绍,可以看这篇文章:
http://eligeske.com/jquery/what-is-the-difference-between-document-and-window-objects-2/

在具体的浏览器实现里,则有windows和tabs的区别

很早以前(IE6之前),浏览器的一个窗口只能打开一个网页;现在基本所有的浏览器都支持TAB了

chrome也提供了API,来控制windows和tabs,分别是chrome.windows和chrome.tabs

4、扩展和插件(extensions and plugins)

扩展和插件不同

扩展主要用javascript开发,可以用chrome://extensions管理

插件用NPAPI开发,语言是C++,可以用chrome://plugins管理

  • 大小: 6.5 KB
分享到:
评论

相关推荐

    padekgcemlokbadohgkifijomclgjgif_v2.5.21.zip

    1. **Chrome插件开发**:Chrome插件基于Chrome的Web扩展API(如chrome.tabs、chrome.storage等)构建,允许开发者访问浏览器的各种功能,如浏览器历史、书签、多进程架构等。 2. **Vue.js框架**:Vue.js提供一套...

    chrome-extensions-samples-main.zip

    4. **内容脚本和背景脚本的通信**:由于同源策略,内容脚本与背景脚本不能直接通信。它们通常通过消息传递(`chrome.runtime.sendMessage` 和 `chrome.runtime.onMessage` API)进行交互,实现数据交换或命令传递。 ...

    Chrome插件开发完整教程

    5. 运行时API:包括`chrome.runtime`、`chrome.tabs`、`chrome.bookmarks`等,用于与浏览器进行交互。 6. 通信机制:Chrome插件提供了`chrome.runtime.sendMessage`和`chrome.runtime.connect`等方法,实现不同脚本...

    谷歌插件(Google)

    9. **跨域问题**:由于同源策略限制,内容脚本不能直接与跨域的网页通信,但可以使用`chrome.tabs.sendMessage`和`chrome.runtime.onMessage`来实现页面与背景脚本间的跨域通信。 10. **用户反馈与评价**:用户可以...

    Instachrome从chrome弹出窗口轻松浏览Instagram

    6. **跨域请求**:Instagram作为一个外部网站,可能会有同源策略限制。JavaScript的跨域请求技术,如JSONP或CORS,可以帮助扩展绕过这些限制,获取和发送数据。 7. **用户界面设计**:虽然JavaScript主要用于后端...

    chrome-extension-sandbox:玩转 Chrome 扩展

    开发者可以使用JavaScript调用Chrome提供的API,如存储数据(chrome.storage)、处理浏览器事件(chrome.tabs.onUpdated)或者操作DOM(在内容脚本中,受限于沙箱环境)。 沙箱环境的安全性体现在以下几个方面: 1...

    Chrome浏览器插件采集数据并显示比价统计图

    6. **Chrome API**:Chrome提供了一系列API,如`chrome.tabs`和`chrome.storage`,允许插件与浏览器进行交互,如获取当前访问的网页URL,存储和读取用户数据。 7. **跨域请求**:由于安全限制,JavaScript在同源...

    chrome-extension

    - **跨域策略**:由于安全原因,扩展中的JavaScript受到同源策略限制,需要通过`chrome.tabs.executeScript`等方法注入内容脚本来跨域操作页面。 - **消息传递**:使用`chrome.runtime.sendMessage`和`chrome....

    chrome-extensions-api-dash-docset:Chrome扩展程序API的Dash文档集。 官方“用户提供的”存储库中的渲染副本尚未针对24个以上版本进行更新,因此,这将使火炬向前发展,以使其保持最新状态

    2. **内容脚本**:这些是运行在网页上下文中的JavaScript脚本,可以与网页DOM交互,但受到同源策略的限制。内容脚本通过`chrome.tabs` API与背景脚本通信。 3. **背景脚本**:运行在单独的全局环境中,不依赖于任何...

    Screenshots-of-the-Chrome-Extension

    它允许开发者访问浏览器提供的API,如chrome.storage API用于数据存储,chrome.tabs API用于与当前活动标签交互,以及chrome.runtime API来管理扩展的生命周期。在“Screenshots-of-the-Chrome-Extension-master”这...

    chrome-ext:chrome 扩展示例,用于学习目的

    但由于同源策略的限制,内容脚本不能直接访问背景脚本,它们之间需要通过`chrome.runtime.sendMessage`和`chrome.runtime.onMessage`进行通信。 此外,Chrome扩展还可以包含浏览器动作、页面动作、选项页面等组件,...

    chrome-extension-skeleton:用于创建Chrome扩展程序的骨架项目

    - **跨域问题**:内容脚本与网页之间存在同源策略限制,但可以使用`chrome.tabs` API的`executeScript`方法跨域注入代码,或者通过`message passing`与背景脚本通信,再由背景脚本与网页进行交互。 - **权限管理**...

    chrome_extension

    2. **内容脚本**:内容脚本是运行在网页上下文中的JavaScript代码,可以直接操作网页DOM,但受到同源策略限制。它们可以用来监听和修改页面事件,实现诸如广告拦截、页面增强等功能。 3. **背景脚本**:背景脚本在...

    chrome-extension:Chrome扩展程序,用于下载ACG图片

    为了确保扩展的安全性和用户隐私,开发者需要遵循Chrome的沙盒环境和同源策略,避免不安全的网络请求和非法数据访问。同时,扩展应该有明确的隐私政策,告知用户哪些数据会被收集以及如何使用。 总的来说,"chrome-...

    chrome-extensions:tuts+ 课程构建 Chrome 扩展的示例代码

    3. **内容脚本**:这些脚本直接注入到用户访问的网页中,可以与网页DOM交互,但受到同源策略的限制。 4. **弹出窗口(popup)**:这是一个HTML页面,通常包含一些UI元素,用户可以通过点击浏览器工具栏上的扩展图标...

    chrome-extension-practice:一个用于练习的 Chrome 扩展示例

    - **内容脚本**:内容脚本是运行在网页上下文中的JavaScript代码,可以直接操作网页DOM,但受到同源策略限制,不能直接访问浏览器API。通常通过`chrome.runtime`或`chrome.tabs` API与背景页面通信。 - **背景页面*...

    chrome-extension-demo:Chrome扩展程序demo

    3. 跨域问题:由于同源策略限制,内容脚本通常无法直接访问其他源的数据,但Chrome扩展可以通过特定机制绕过这一限制。 4. 消息传递:扩展的背景脚本和内容脚本之间,或者扩展与页面之间,常常需要通过消息传递来...

    chrome-plugin-cookies:快捷添加cookie的chrome插件

    4. **数据存储**:由于浏览器的同源策略,插件不能直接在不同域之间共享数据。因此,插件可能需要使用Chrome的`chrome.storage` API来保存用户的设置和历史记录,确保这些信息在插件使用过程中持久化。 5. **权限...

    chrome-extension-dabble:尝试使用 chrome 扩展程序

    1. **跨域请求**:通过`XMLHttpRequest`或`fetch`API,扩展可以绕过同源策略,获取任何网站的数据。 2. **Chrome API调用**:可以使用`chrome.*`对象访问Chrome提供的各种API,如`chrome.tabs`用于处理标签,`...

    chromeExt1:chrome 扩展代码的占位符

    3. **内容脚本(content script)**:这些脚本在用户访问的网页上下文中运行,可以操作DOM,但受到同源策略的限制。它们通常用于修改网页内容或提取数据。 4. **浏览器动作(browser action)/页面动作(page ...

Global site tag (gtag.js) - Google Analytics