chrome 扩展中的跨域 XMLHttpRequest

IT技术 javascript ajax google-chrome google-chrome-extension xmlhttprequest
2021-03-16 14:34:46

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

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

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

XMLHttpRequest 无法加载http://www.google.com/search?hl=en&q=ajaxAccess-Control-Allow-Origin 不允许 Origin chrome-extension://bmehmboknpnjgjbmiaoidkkjfcgiimbo。

我不仅允许向 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"
  }
}

实际调用:

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();
} 
1个回答

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

答对了!我所遵循的教程没有提到必须对其进行打包才能使跨域 xmlhttprequest 正常工作这一事实。我想这是我从出生就应该知道的事情。谢谢!
2021-04-17 14:34:46
2021-04-21 14:34:46
是的,我经历了同样的反复试验来弄清楚。确实应该更新文档以反映托管应用程序和打包应用程序之间的差异,并可能弄清楚扩展程序是否与应用程序等相同。
2021-04-30 14:34:46
什么是打包和托管的扩展?
2021-05-12 14:34:46
请注意,在安装需要权限 ["http://*/"] 的应用程序时,用户将收到警告“此应用程序:可以访问您在所有网站上的数据”。我的应用程序的用户现在正在使用 1 星评价烧毁该应用程序:(。
2021-05-13 14:34:46