Firefox WebExtension中的CORS fetch提供了TypeError

时间:2017-09-28 14:53:22

标签: javascript firefox firefox-webextensions

我正在尝试在firefox网络扩展程序中获取外部资源

for (var show of shows) {
  let title = show.getElementsByClassName("video-preload-title-label")[0]
    .innerText;

  let search_url = `https://www.rottentomatoes.com/search/?search=${encodeURI(
    title
  )}`;

  fetch(search_url, { mode: "cors", method: "get" })
    .then(response => {
      if (!response.ok) {
        throw Error(response.statusText);
      }
      console.log(response);
    })
    .catch(err => {
      console.log(err);
    });
}

但我收到以下错误:

TypeError: NetworkError when attempting to fetch resource.
Stack trace:
@moz-extension://e009585c-e0b0-4898-82bd-5049f92b82d9/main.js:17:3
main.js:25:7

我已将相关权限添加到我的manifest.json文件中:

{
    "manifest_version": 2,
    "name": "rotten-netflix",
    "version": "1.0",

    "description": "Adds rotton tomato score to netflix shows",

    "icons": {
        "48": "icons/border-48.png"
    },

    "content_scripts": [
        {
            "matches": ["*://*.netflix.com/*"],
            "js": ["main.js"]
        }
    ],
    "permissions": [
        "*://rottentomatoes.com/search*",
        "webRequest"
    ]
}

所有search_urls都遵循相同的模式,即:

https://www.rottentomatoes.com/search/?search=Toast%20of%20London

所以我已将"*://rottentomatoes.com/search*" Match Pattern添加到我的清单文件中。但这似乎没有什么区别。

我很难过,因为我不确定这是否是权限错误:即我没有在我的扩展程序内发出请求所需的权限。或者获取代码本身是否不正确。

1 个答案:

答案 0 :(得分:-1)

我认为无法做到。我不是100%确定它在Firefox网络扩展中是如何工作的,但我认为它应该坚持"同源策略不允许读取资源"。由于您无法影响rottentomatoes添加Access-Control-Allow-Origin *标头,因此我看到的唯一解决方案是在您的请求中创建某种中间人代理脚本。