您好这是我的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'
});
});
这项工作很有效,但我唯一需要做的就是只为谷歌或其他特定领域运行此扩展程序。
我尝试添加匹配网址,但它给了我错误
答案 0 :(得分:0)
注意:以下部分是指在编辑中完全更改之前的旧问题:
它说它就在那里。
'content_scripts'的值无效。
那是你的问题。看看example in the docs并比较......
是的,问题是你没有定义任何js
/ css
,但你定义了matches
(它什么都不做,只会导致错误)。如果您不使用内容脚本,请完全删除content_scripts
部分。
本节涉及新问题:
你正在将各种东西混合在一起,我很惊讶它有点有用,可能是因为后台页面也有一个DOM,当你在网页中注入相同的脚本时,它似乎可以工作,因为实际工作完成后,chrome.browserAction.onClicked
发生不可避免的崩溃。
所以,首先应该做的是:创建两个文件。一个是后台脚本,一个是内容脚本。他们做两件不同的事情并且也有不同的特权。在后台脚本中,您有browserAction
部分,然后注入您的内容脚本。
如果您的内容脚本应该始终在运行,那么可以采用content_scripts
和matches
来删除背景页面并使用js
值。但是,由于您希望仅在单击按钮时才注入它,因此必须按照我在上一段中描述的方式进行注入。现在要检查页面是否是您喜欢的页面,您需要做的就是检查the url
property of your tab
。您当然可以将其填入URL
对象,然后访问其属性。
例如:if(new URL(tab.url).hostname == "google.com") doSomething()
哦,你应该肯定缩进代码并正确显示。只需将其填充到在线JavaScript美化器中即可看到差异。