我是Chrome扩展程序的新手。我正在尝试在内容脚本和background.html页面之间进行通信。 background.html向内容脚本发送请求“hello”,并且内容脚本应以“hello background”警报回复。但这只是没有发生。我的background.html代码是:

function testRequest() {
    chrome.tabs.getSelected(null, function(tab) {
        chrome.tabs.sendRequest(tab.id, {greeting: "hello"});
    });
}

content.js代码:
chrome.extension.onMessage.addListener(
    function(request, sender, sendResponse) {
        if (request.greeting == "hello")
        alert("hello background");
    }
);

popup.html代码:
<!doctype html>
<html>
    <head></head>
    <body>
        <form>
            <input type="button" value="sendMessage" onclick="testRequest()" />
        </form>
    </body>
</html>

manifest.json:
{
    "browser_action": {
        "default_icon": "icon.png",
        "popup": "popup.html"
    },
    "background": {
        "page": "background.html"
    },
    "permissions": [
        "tabs",
        "http://*/*",
        "https://*/*",
        "notifications",
        "contextMenus"
    ],
    "content_scripts": [
        {
            "matches": ["http://*/*","https://*/*"],
            "js": ["content.js"]
        }
    ],
    "name": "FirstExtension",
    "version": "1.0"
}

请帮忙!

最佳答案

在Chrome 20中,sendRequest / onRequest替换为sendMessage / onMessage*Message不仅仅是*Request的别名,它是一个不同的API。

如果要支持Chrome onRequest和sendRequest。否则,请使用*Message方法。

另一个问题是您的函数位于后台页面中,而调用是在弹出窗口中进行的。这些是不同的作用域,如果要从弹出窗口中调用后台页面方法,请使用 chrome.extension.getBackgroundPage() :

chrome.extension.getBackgroundPage().testRequest();

最后说明:您正在使用 list 版本1和内联事件处理程序。不推荐使用此方法,有关更多信息,请参见http://code.google.com/chrome/extensions/manifestVersion.html

关于javascript - Chrome扩展程序:内容脚本和background.html之间的通信,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11752341/

10-11 13:58
查看更多