好的,这就是我希望扩展程序要做的事情。我希望它为页面添加一些HTML(标签,按钮等)。
这是我拥有的......
content.js(它实际上是尝试添加标签而不是按钮)
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if (request.action == "addButton") {
addButtonHTML();
}
});
function addButtonHTML() {
$('body').append("<label>HHHHHHHHHHHHHHHHHHHHH</label>");
}
background.js
addButton("addButton");
function addButton(action) {
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.sendRequest(tab.id, {
action: action,
tabid: tab.id
}, function(response) {});
});
}
我的问题是,我做错了什么?我的清单应该是什么样的,这就是我现在所拥有的。
的manifest.json
{
"name": "Extension",
"version": "1.0",
"description": "Does Stuff",
"background": {
"scripts": ["background.js"],
"persistent": false
},
"page_action": {
"default_icon": "icon-19.png"
},
"permissions": [
"http://*/*",
"https://*/*",
"tabs"
],
"icons": {
"48": "icon-48.png",
"128": "icon-128.png"
},
"content_scripts": [{
"matches": ["http://*/*", "https://*/*"],
"js": ["content.js"]
}],
"manifest_version": 2
}
谢谢
答案 0 :(得分:1)
您表示您只想在background.js
中确定的某些网页上显示此内容。这意味着您可以从清单中删除内容脚本,我认为您还可以将tabs
权限更改为activeTab
。仍然存在这样的问题:标签是应该始终加载在这些页面上,还是仅在用户操作之后加载。
如果标签应该始终在那里,您希望background.js
(将在每次加载页面时运行)调用chrome.tabs.executeScript
来加载content.js
(reference),不再需要你添加的监听器。
如果标签应显示为用户操作的结果,则听起来像是您想要page action。除上述内容外,background.js
应致电chrome.pageAction.show(tabId)
以显示网页操作图标,并使用chrome.pageAction.onClicked.addListener(loadScriptFunction)
致电executeScript
。
编辑:我认为我能够最终诊断您的尝试出错的地方。 Google没有指定background.js
何时执行,但似乎很少(扩展启动?),绝对不会在content.js
之后。如果你将addButton("addButton")
包裹在chrome.pageAction.onClicked.addListener
内,那么它似乎可以正常工作。