0

我知道有很多关于“Access-Control-Allow-Origin 不允许”的问题。错误。

但我已经尝试了其中一些但没有成功。:(

一些约会:

  • 我正在尝试构建一个 dev-tools-tab 扩展
  • 我可以像示例所示那样触摸 flickr API
  • 我无法访问本地主机

已经尝试了几个权限通配符

http://localhost/
http://*/
*://*/

已经尝试过打包和解包扩展

目前, manifest.json 有

"version": "0.0.1",
"manifest_version": 2,
"devtools_page": "components/devtools.html",
"permissions": [
    "http://*/"
]

开发工具.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
</head>
<body>
    <script src="../js/devtools.js"></script>
</body>
</html>

并且,devtools.js

(function (window) {
"use strict";
var xhr1, xhr2, url;
xhr1 = new window.XMLHttpRequest();
xhr2 = new window.XMLHttpRequest();
xhr1.onreadystatechange = function () {
    if (this.readyState === 4) {
        console.log('flickr ok');
    }
};
xhr2.onreadystatechange = function () {
    console.log(this.readyState);
    if (this.readyState === 4) {
        console.log(this.responseText);
    }
};
url = 'https://secure.flickr.com/services/rest/?' +
          'method=flickr.photos.search&' +
          'api_key=90485e931f687a9b9c2a66bf58a3861a&' +
          'text=' + encodeURIComponent('cats') + '&' +
          'safe_search=1&' +
          'content_type=1&' +
          'sort=interestingness-desc&' +
          'per_page=20';
xhr1.open('get', url, true);
xhr1.send();
url = 'http://apache.local';
xhr2.open('get', url, true);
xhr2.setRequestHeader('Origin', url);
xhr2.send();

Chrome 控制台输出:

1 devtools.js:12
Refused to set unsafe header "Origin" devtools.html:1
XMLHttpRequest cannot load http://apache.local/. Origin chrome-extension://nafbpegjhkifjgmlkjpaaglhdpjchlhk is not allowed by Access-Control-Allow-Origin. devtools.html:1
4 devtools.js:12
flickr ok devtools.js:8

Chrome 版本:28.0.1500.20 开发

感谢任何建议。

4

1 回答 1

1

我懂了!

实际上,问题是我试图在 devtools 页面上执行 XHR 请求,并且它似乎没有权限绕过像弹出页面那样的跨域访问策略。

Devtools 选项卡尝试也不成功。

编辑

是阶段权限相关的。不是通配符权限。正如我所说,我已经设法在某些域上执行查询,但没有明确地将它们放在我的权限数组中。

问题实际上在于运行的脚本类型。

相同的脚本,如果用作弹出窗口,就可以了。所以,我也尝试过成功的背景脚本!我面临的问题是 devtools_page 和相关的没有这样的权限......

开发者工具窗口中扩展页面可用的 API 包括上面列出的所有 devtools 模块和 chrome.extension API。其他扩展 API 对开发者工具页面不可用,但您可以通过向扩展的后台页面发送请求来调用它们,类似于在内容脚本中完成的方式。

http://developer.chrome.com/extensions/devtools.html

该级别的脚本拒绝非显式交叉 xhrs。

解决了将请求放入后台脚本并使用消息 api的问题。

谢谢!

于 2013-05-23T23:59:29.433 回答