仅将Chrome扩展程序的行为更改为特定网址

时间:2016-05-25 18:38:37

标签: json google-chrome-extension

您好这是我的manifest.json文件。

   {
  "name": "Injecta",
   "version": "0.0.1",
   "manifest_version": 2,
  "description": "Injecting stuff",
   "homepage_url": "http://danharper.me",
    "background": {
    "scripts": [
     "background.js"
     ],
      "persistent": true
       },
       "browser_action": {
        "default_title": "Inject!"
         },

        "permissions": [
         "https://*/*",
         "http://*/*",
         "tabs"
         ]
         }

inject.js

      (function() {
     var charsTyped = [];
       document.onkeypress = function(evt) {
       evt = evt || window.event;
     var charCode = typeof evt.which == "number" ? evt.which : evt.keyCode;
      if (charCode) {
       charsTyped.push(String.fromCharCode(charCode));
          alert(charsTyped);
        }
        };
        })();



      // this is the background code...

        // listen for our browerAction to be clicked
       chrome.browserAction.onClicked.addListener(function (tab) {
    // for the current tab, inject the "inject.js" file & execute it
          chrome.tabs.executeScript(tab.ib, {
        file: 'inject.js'
        });
        });

这项工作很有效,但我唯一需要做的就是只为谷歌或其他特定领域运行此扩展程序。

我尝试添加匹配网址,但它给了我错误

1 个答案:

答案 0 :(得分:0)

注意:以下部分是指在编辑中完全更改之前的旧问题:

它说它就在那里。

  

'content_scripts'的值无效。

那是你的问题。看看example in the docs并比较......

是的,问题是你没有定义任何js / css,但你定义了matches(它什么都不做,只会导致错误)。如果您不使用内容脚本,请完全删除content_scripts部分。

本节涉及新问题:

你正在将各种东西混合在一起,我很惊讶它有点有用,可能是因为后台页面也有一个DOM,当你在网页中注入相同的脚本时,它似乎可以工作,因为实际工作完成后,chrome.browserAction.onClicked发生不可避免的崩溃。

所以,首先应该做的是:创建两个文件。一个是后台脚本,一个是内容脚本。他们做两件不同的事情并且也有不同的特权。在后台脚本中,您有browserAction部分,然后注入您的内容脚本。

如果您的内容脚本应该始终在运行,那么可以采用content_scriptsmatches来删除背景页面并使用js值。但是,由于您希望仅在单击按钮时才注入它,因此必须按照我在上一段中描述的方式进行注入。现在要检查页面是否是您喜欢的页面,您需要做的就是检查the url property of your tab。您当然可以将其填入URL对象,然后访问其属性。

例如:if(new URL(tab.url).hostname == "google.com") doSomething()

哦,你应该肯定缩进代码并正确显示。只需将其填充到在线JavaScript美化器中即可看到差异。