Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 阻止webRequest的Chrome扩展似乎根本不起作用_Javascript_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript 阻止webRequest的Chrome扩展似乎根本不起作用

Javascript 阻止webRequest的Chrome扩展似乎根本不起作用,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我只是想让工作顺利进行。这是manifest.json { "description": "Altering HTTP responses", "manifest_version": 2, "name": "http-response-filter", "version": "1.0", "homepage_url": "https://github.com/mdn/webextensions-examples/tree/master/http-response",

我只是想让工作顺利进行。这是manifest.json

{
  "description": "Altering HTTP responses",
  "manifest_version": 2,
  "name": "http-response-filter",
  "version": "1.0",
  "homepage_url":
    "https://github.com/mdn/webextensions-examples/tree/master/http-response",
  "icons": {
    "48": "SA-48x48.png"
  },

  "background": {
    "scripts": ["background.js"]
  }
}
下面是background.js

function listener(details) {
  console.log("******listen");
  let filter = browser.webRequest.filterResponseData(details.requestId);
  let decoder = new TextDecoder("utf-8");
  let encoder = new TextEncoder();

  filter.ondata = event => {
    let str = decoder.decode(event.data, { stream: true });
    // Just change any instance of Example in the HTTP response
    // to WebExtension Example.
    str = str.replace(/Example/g, "WebExtension Example");
    filter.write(encoder.encode(str));
    filter.disconnect();
  };

  return {};
}
console.log("******");
browser.webRequest.onBeforeRequest.addListener(
  listener,
  { urls: ["https://example.com/*"], types: ["main_frame"] },
  ["blocking"]
);
所以我希望它会

  • 当我加载
    example.com
  • 将MDN声明的“示例”修改为“WebExtension示例”
然而,它对我来说根本不起作用(我使用的是Chrome,我将它作为一个未打包的扩展添加到我的扩展中,我以前做过其他Chrome扩展,但这是我第一次做背景脚本)


是否可能有什么东西阻止了此后台脚本的运行?我只是没有以正确的方式配置它吗?请为我指出正确的方向,非常感谢。

您的Chrome扩展需要“询问”使用webRequest API的权限,以便该扩展的用户将得到该扩展可能能够执行的操作的通知

尝试将其添加到您的
manifest.json

"permissions": [
    "webRequest",
    "webRequestBlocking"
]

Chrome不支持修改响应主体,因此无法正常工作。我不认为这是真的,我是直接从MDN获得的,我还见过其他使用此API的扩展(如SmileAlways)。我认为这里有一个设置,我没有弄对?我删除了我的帖子,因为它实际上不是对你问题的回答-评论更适合于建议。如果加载了脚本,console.log应该向控制台打印一些内容-因此可能有一些内容阻止加载脚本。顺便问一下-调试时是否检查扩展的背景页?@swyx,您显然没有检查SmileAlways的代码。它不使用browser.webRequest.filterResponseData。它是铬合金的,你也可以在屏幕上看到。另外,
浏览器
名称空间是特定于Firefox的,它在Chrome中也不存在,所以你们需要一个polyfill。嘿,伙计们,所以我在50分钟前再次开始这方面的工作,现在我已经解决了所有问题。所以,是的,你是对的,它是
chrome
而不是
browser
。我也不知道它打印到后台页面的控制台而不是主控制台页面。最后终于明白了,非常感谢!我不知道你为什么被否决。。将您标记为与背景页检查提示一样正确是正确的做法,这正是我调试其他所有内容所需要的。非常感谢你。