Chrome onMessage Listener未被调用

时间:2012-12-30 11:28:41

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

我正在试验chrome.extension API。

的manifest.json

{
    "name": "First",
    "version": "1.0",
    "manifest_version": 2,
    "description": "First extension",
    "background": {
        "scripts": ["test.js"]
    },    
    "page_action": {
        "default_icon": "icon.png",
        "default_popup": "popup.html"
    },    
    "content_scripts": [ {
        "js": [ "jquery.min.js", "display.js"  ],
        "matches": [ "http://*/*", "https://*/*" ]    
    } ],

    "permissions" : [
        "tabs",
    "http://*/*", "https://*/"
        ]
}

display.js

alert("inside display.js");

chrome.extension.onMessage.addListener(
        function(request, sender, sendResponse){
            alert("inside msg");
            var time = request.sel_text;
            alert(time);

        });

test.js

function check(tab_id, data, tab){
    if(tab.url.indexOf("google") > -1){
        chrome.pageAction.show(tab_id);
        chrome.tabs.executeScript(null, {"file" : "display.js"}) ;
    }
};
chrome.tabs.onUpdated.addListener(check);

popup1.js

function myfunc(){

    var x = $('#options option:selected').text();
    alert(x);
    chrome.extension.sendMessage({sel_text: x});

}

$(document).ready(function(){
    $('#options').change(myfunc);

});

现在,当我的网页加载时,我会three(3)弹出提示inside display.js,但永远不会调用chrome.extension.onMessage.addListener

那么,我做错了什么。我们是否可以从内容脚本访问chrome.extension.* API。

2 个答案:

答案 0 :(得分:6)

chrome.extension.sendMessage仅在扩展程序范围内触发onMessage个侦听器,不包括内容脚本

您可以使用chrome.tabs.sendMessage方法通知内容脚本,如下所示:

function myfunc() {
    var x = $('#options option:selected').text();
    var message = {sel_text: x};
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
        var tabId = tabs[0].id;
        chrome.tabs.sendMessage(tabId, message);
    });
}

答案 1 :(得分:0)

清单文件中未使用或引用的chrome.extension.sendMessage({sel_text: x});中的

popup1.js。您在扩展程序中使用popup1.js的位置?

当从扩展进程或内容脚本发送消息时,

chrome.extension.onMessage.addListener被触发,您的代码中没有发送任何消息!

此外,为什么要在chrome.tabs.executeScript(null, {"file" : "display.js"}) ;注册时background page重新注入脚本manifest file