Chrome扩展中的跨源XMLHttpRequest

mat*_*eek 11 javascript ajax google-chrome xmlhttprequest google-chrome-extension

根据chrome扩展API,如果设置了权限,则应允许使用XMLHttpRequest对象进行跨域调用:

扩展可以与其来源之外的远程服务器通信,只要它首先请求跨源权限即可.

我正在密切关注本教程,但下面的代码给出了一条错误消息:

XMLHttpRequest无法加载http://www.google.com/search?hl=en&q=ajax.原始chrome-extension:// bmehmboknpnjgjbmiaoidkkjfcgiimbo不允许使用Access-Control-Allow-Origin.

我不仅允许google.com的请求,而且要求任何网站但仍然无法通过.有人可以帮忙吗?

我的清单文件:

{
  "name": "The popup",
  "version": "0.1",
  "popup": "popup.html",
  "permissions": [
    "http://*/*",
    "https://*/*",
    "https://www.google.com/*",
    "http://www.google.com/*"
    ],
  "browser_action": {
    "default_icon": "clock-19.png",
    "default_title": "This is title",
    "default_popup": "popup.html"
  }
}
Run Code Online (Sandbox Code Playgroud)

实际的电话:

function sendRequest() {
    document.write("Sending request");
    var req = new XMLHttpRequest();
      req.open("GET", "http://www.google.com/search?hl=en&q=ajax", true);
      req.onreadystatechange = function() {
          if (req.readyState == 4) {
            if (req.status == 200) {
              alert(req.responseText);
              document.write("OK");
            }
          }
        };
      req.send();
} 
Run Code Online (Sandbox Code Playgroud)

Mar*_*ahl 27

两件事情; 您需要确保制作打包的应用/扩展程序而不是托管的应用程序/扩展程序.跨源请求不适用于托管应用程序.假设您已将该部分固定下来,您可能需要尝试将以下内容放入您的权限中:http://*/.对于我的一个打包应用程序来说,这是我唯一拥有的应用程序,它可以毫无问题地交叉原始内容.

  • 请注意,在安装需要权限["http://*/"]的应用时,用户会收到警告"此应用:可以访问所有网站上的数据".我的应用程序的用户正在为该应用程序刻录1星评价:(. (6认同)
  • 什么是打包和托管扩展? (5认同)
  • 答对了!我所遵循的教程没有提到有关必须打包以使交叉源xmlhttprequest正常工作这一事实的说法.我想这是我出生以来应该知道的.谢谢! (3认同)
  • @barraponto参考https://developers.google.com/chrome/web-store/articles/apps_vs_extensions?hl=zh-CN (2认同)