读书人

Chrome Extension中跨域请求访问外部网

发布时间: 2012-08-14 10:39:57 作者: rapoo

Chrome Extension中跨域请求访问外部网站数据方法

当时做Chrome扩展,用Javascript调用外部API总是不成功,会出现across origin error。后来发现跨域了,如果想在Chrome扩展中访问其他网站数据,只需在manifest.json文件中的”permission“中声明,再用xmlhttpRequest即可。详细介绍如下(转自360chrome的开发文档,同时可参考Chrome extension):

跨域 XMLHttpRequest 请求

普通网页能够使用XMLHttpRequest对象发送或者接受服务器数据, 但是它们受限于同源策略. 扩展可以不受该限制. 任何扩展只要它先获取了跨域请求许可,就可以进行跨域请求。

注意:页面内容脚本不能直接发起跨域请求. 然而, 任何一个页面内容脚本都可以发送消息给父扩展,请求父扩展发起一次跨域请求。关于使用这一技术的例子,请参照contentscript_xhr example.

扩展所属域

每个正在运行的扩展都存在于自己独立的安全域里. 当没有获取其他权限时,扩展能够使用XMLHttpRequest获取来自安装该扩展的域的资源. 例如, 假设有一个扩展包含一个叫config.json的JSON配置文件,该文件位于config_resources?目录, 那么该扩展能够使用下面这段代码获取文件内容:

var xhr = new XMLHttpRequest();xhr.onreadystatechange = handleStateChange; // Implemented elsewhere.xhr.open("GET", chrome.extension.getURL('/config_resources/config.json'), true);xhr.send();

如果某个扩展希望访问自己所属域以外的资源,比如说来自http://www.google.com的资源(假设该扩展不是来自www.google.com), 浏览器不会允许这样的请求,除非该扩展获得了相应的跨域请求允许。

获取跨域请求允许

通过添加域名或者域名匹配到manifest文件的permissions段, 该扩展就拥有了访问除了自己所属域以外的其他域的访问权限.

{  "name": "My extension",  ...  "permissions": [    "http://www.google.com/"  ],  ...}

跨域允许设置可以使用完整域名, 例如:

读书人网 >Web前端

热点推荐