无法动态更改网址过滤器Chrome扩展程序

时间:2017-12-24 13:23:30

标签: javascript google-chrome google-chrome-extension

这是我的Chrome扩展程序代码:

background.js:

var blockedUrls = function () {
    if (localStorage.blocks) {
        return JSON.parse(localStorage.blocks).urls
    } else {
        return [];
    }
}

chrome.webRequest.onBeforeRequest.addListener(
    function () {
        return {cancel: true};
    },
    {urls: blockedUrls()},
    ["blocking"]
);

的manifest.json:

{
  "name": "HintBlockRequest",
  "version": "1.0.0",
  "manifest_version": 2,
  "description": "Block URLS",
  "background":  {
    "scripts": [ "background.js"]
  },
  "browser_action": {
    "default_icon": "icon.png",
    "default_title": "Hint Block Request"
  },
  "icons": {
    "16": "icon_16.png",
    "48": "icon_48.png",
    "128": "icon_128.png"
  },
  "permissions": [
    "storage",
    "webRequest",
    "webRequestBlocking",
    "<all_urls>"
  ]
}

目标是当localStorage为空时 - 过滤空列表。然后,当我用local:

填充localStorage时
localStorage.setItem('blocks', JSON.stringify({urls: ['https://*/*css*','http://*/*css*']}))

应更新网址过滤器。

工作代码是:

    chrome.webRequest.onBeforeRequest.addListener(
    function () {
        return {cancel: true};
    },
    {urls: ['https://*/*css*','http://*/*css*']},
    ["blocking"]
);

(没有功能)

我得到的错误是:

Uncaught Error: Invalid value for argument 1. Property 'urls': Expected 'array' but got 'function'.
    at validate (extensions::schemaUtils:34:13)
    at WebRequestEventImpl.addListener (extensions::webRequestEvent:80:3)
    at WebRequestEvent.publicClassPrototype.(anonymous function) [as addListener] (extensions::utils:138:26)
    at chrome-extension://gccoagdpplpkngajecblejkpopiojofd/background.js:13:35

1 个答案:

答案 0 :(得分:0)

blockedUrlsfunction返回一个数组,但你错过了调用它。而不是

{urls: blockedUrls},

你需要

{urls: blockedUrls()},