【问题标题】:Popup script and content script can't communicate?弹出脚本和内容脚本无法通信?
【发布时间】:2014-06-02 10:47:59
【问题描述】:

我的问题是我似乎无法从我的 popup.js 传输到我的 content.js 获取消息 chrome.extension.sendMessage("on");

来自 popup.js 的代码:

function click(e) {
    if ( e.target.id == "green"){
        chrome.extension.sendMessage("start");
        console.info("oN");
        return;
    }

    if ( e.target.id == "red"){
        chrome.extension.sendMessage("stop");
        console.info("oFF");
        return;
    }
}

当我在代码中添加监听器时,popup.js 可以很好地接收消息。但我的 content.js 似乎无法获取。

来自 content.js 的代码:

chrome.extension.onMessage.addListener(
    function(request, sender, sendResponse) {
        console.info("ok");
    }
);

清单:

"content_scripts": [
{
    "matches": ["<all_urls>"],
    "js": ["content.js"],
    "run_at": "document_end"
}
],

非常感谢任何帮助。

【问题讨论】:

  • 对我来说很好。为什么你认为它不起作用?你能显示你的清单文件吗?
  • 我根据您的要求更新了我的问题。谢谢。

标签: javascript jquery google-chrome google-chrome-extension


【解决方案1】:

chrome.extension.sendMessage 是一个非规范名称。

已弃用的旧 API 是 chrome.extension.sendRequest,新 API 是 chrome.runtime.sendMessage,事件同样是 chrome.runtime.onMessage


也就是说,您的问题是尝试向内容脚本发送消息。 chrome.runtime.sendMessage 发送消息到扩展自己的页面;内容脚本不被视为此类。

要将消息发送到内容脚本,您必须通过标签的tabId 使用chrome.tabs.sendMessage API call

假设你想要当前可见的标签:

function click(e) {
    if ( e.target.id == "green"){
        chrome.tabs.query({active:true, currentWindow: true}, function(tabs){
            chrome.tabs.sendMessage(tabs[0].id, "start");
        });
        console.info("oN");
        return;
    }
    /* ... */
}

如果您想要所有标签,只需将{} 传递给query 并遍历tabs

最后,记下content scripts inject time quirks

【讨论】:

    猜你喜欢
    • 2020-10-12
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多