日期:2014-05-16  浏览次数:20405 次

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管理