使用Chrome扩展程序将HTML添加到页面

时间:2014-03-10 22:14:32

标签: javascript google-chrome-extension

好的,这就是我希望扩展程序要做的事情。我希望它为页面添加一些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
}

谢谢

1 个答案:

答案 0 :(得分:1)

您表示您只想在background.js中确定的某些网页上显示此内容。这意味着您可以从清单中删除内容脚本,我认为您还可以将tabs权限更改为activeTab。仍然存在这样的问题:标签是应该始终加载在这些页面上,还是仅在用户操作之后加载。

如果标签应该始终在那里,您希望background.js(将在每次加载页面时运行)调用chrome.tabs.executeScript来加载content.jsreference),不再需要你添加的监听器。

如果标签应显示为用户操作的结果,则听起来像是您想要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内,那么它似乎可以正常工作。