Chrome 网络请求阻止不起作用

ful*_*ard 1 javascript google-chrome google-chrome-extension

我正在尝试使用 webrequest api,但在使用它来阻止网站时遇到了问题。

清单文件

{
  "manifest_version": 2,

  "name": "blocktwitter",
  "description": "block twitter",
  "version": "1.0",

  "permissions": [
  "https://ajax.googleapis.com/",
  "activeTab",
  "storage",
  "webRequest",
  "webRequestBlocking"
  ],

"background": {
"scripts": ["background.js"],
"persistent": true
  }
}
Run Code Online (Sandbox Code Playgroud)

背景.js:

chrome.webRequest.onBeforeRequest.addListener(
    function(details) { return {cancel: true}; },
    {urls: ["https://twitter.com"]},
    ["blocking"]);
Run Code Online (Sandbox Code Playgroud)

我从 twitter 复制并粘贴了 url,并从文档中复制了代码,但它仍然无法正常工作。我不确定我做错了什么。帮助将不胜感激。

Mak*_*yen 5

你有两个问题。

问题 #1:无效的匹配模式

第一个问题是您传递到的 URLchrome.webRequest.onBeforeRequest.addListener()不是有效的匹配模式。匹配模式需要一个路径组件。如果您查看了后台页面/脚本的控制台,您会看到以下错误:

_generated_background_page.html:1 Unchecked runtime.lastError while running webRequestInternal.addEventListener: 'https://twitter.com' is not a valid URL pattern.
Run Code Online (Sandbox Code Playgroud)

你的background.js应该是这样的:

chrome.webRequest.onBeforeRequest.addListener(
    function(details) {
        console.log('In webRequest');
        return {cancel: true};
    }, {
        urls: ["https://*.twitter.com/*"]
    }, ["blocking"]
);
Run Code Online (Sandbox Code Playgroud)

问题 2:没有 twitter.com 的主机权限

您需要获得您阻止的主机的权限。您必须permissions在manifest.json 中声明数组中的主机。就像是:

{
  "manifest_version": 2,

  "name": "blocktwitter",
  "description": "block twitter",
  "version": "1.0",

  "permissions": [
    "https://ajax.googleapis.com/*",
    "https://*.twitter.com/*",
    "activeTab",
    "storage",
    "webRequest",
    "webRequestBlocking"
  ],

  "background": {
    "scripts": ["background.js"],
    "persistent": true
  }
}
Run Code Online (Sandbox Code Playgroud)