来自Firefox WebExtension的XMLHttpRequest

时间:2016-06-21 12:10:37

标签: javascript ajax firefox firefox-addon firefox-webextensions

我已经看到了大量从Firefox附加组件创建xhr请求的示例,但我尝试使用新的WebExtensions内容(其中requireComponents未定义)并且似乎无法理解为什么我无法从扩展名中发送简单的XmlHttpRequest?

值得注意的是,ajax请求将进入一个完全不同的URL,但主机的CORs设置为允许所有来源。

一旦.send()被解雇,我就会收到错误:

  

[例外......“失败”nsresult:“0x80004005(NS_ERROR_FAILURE)”位置:“JS frame :: resource://gre/modules/ExtensionContent.jsm - > moz-extension:// 9ca18411-9a95- 4fda-8184-9dcd3448a41a / myapp.js :: GM_xmlhttpRequest :: line 162“data:no]”1 whatsapp.js:166:9

代码如下所示:

function GM_xmlhttpRequest(orders) {
  try {
    var oReq = new XMLHttpRequest();
    oReq.addEventListener("load", function(a1, a2, a3) {
      console.log('xhr.load: %s, %s, %s', a1, a2, a3);
    });

    // open synchronously
    oReq.open(orders.method, orders.url, false);

    // headers
    for (var key in orders.headers) {
      oReq.setRequestHeader(key, orders.headers[key]);
    }

    // send
    var res = oReq.send(orders.data);
    console.log('xhr result: %s', res);
  } catch(e) {
    debugger;
    console.warn('could not send ajax request %s to %s, reason %s', orders.method, orders.url, e.toString());
  }
}

我已经为我的manifest.json添加了webRequest权限,我意识到这不是它的意思,但我很难理解是什么阻止了ajax请求?有什么想法吗?

{
  "manifest_version": 2,
  "name": "MyApp",
  "version": "1.0",
  "description": "TestXHR",
  "icons": {
       "48": "icons/myapp-48.png"
  },
  "applications": {
      "gecko": {
      "id": "software@vigilantapps.com",
      "strict_min_version": "45.0"
  }
  },
  "content_scripts": [
    {
      "matches": ["*://web.myapp.com/*"],
      "js": ["myapp.js"]
    }
  ],  
  "permissions": [
    "https://thehost.all-xhr-sent-here.net/*",
    "webRequest"
    ]
  }

1 个答案:

答案 0 :(得分:4)

问题是指定的权限URL。我将子域更改为星号,将协议更改为星号,之后似乎可以正常工作。