从popup.js和content-scripts传递到background.html的消息

时间:2012-12-15 18:37:08

标签: google-chrome google-chrome-extension chromium message-passing

我正在尝试使用popup / popopen菜单向用户显示基于当前页面URL的不同内容,但无法获得连接。我已经读过只有 background.html 可以访问Chrome框架中当前标签的网址,所以我试图通过它来告诉我的内容脚本和我的popup.js消息传递 - background.html将收到一条消息,并在响应中包含正确的信息。 Popup应该能够使用getBackgroundPage()但是不允许使用内容注入脚本,所以我想为两者使用消息传递并且有一个共同的解决方案。

所以......有关失败连接的控制台消息被隐藏在一些我甚至无法查看的随机实现代码中,即:miscellaneous_bindings:236或miscellaneous_bindings:235,具体取决于cal的参数。试图查看我们点击的位置让我知道:

  

chrome-devtools:// devtools / miscellaneous_bindings的网页可能暂时关闭,或者可能已永久移至新的网址。

我确信我正在做一些愚蠢的事情,否则我的系统搞砸了,但我无法弄清楚哪个。我见过的大多数示例和问题要么需要 beta - 发布渠道功能,要么使用v1.0清单,使用已弃用的函数(来自2011年的问题),或者没有接受的答案。我用的是Chrome 24.0.1312.40米 我已禁用其他扩展程序。

以下是我们如何设置...

popup.html

<!doctype html>
<html>
    <head>
        <title>Working title popup</title>
        <script src="popup.js">
            // nothing allowed in here
        </script>
    </head>
    <body>

    <form>
        <fieldset>
        <button>Demo</button>
        <!--^ push to try again to get response string from background -->
        </fieldset>
    </form>

    </body>
</html>

popup.js:

asky();

function asky(){
        catchersMit=null;
        console.log("Going to get info.");
        // Below causing Port error: 
        //"Could not establish connection. Receiving end does not exist.":
        chrome.extension.sendMessage({msg:"need some info"} //arg1
                                     ,function(response){   //arg2
                                        alert(reponse.msg);
                                        //^ yields undefined in alert window
                                        catchersMit=response;}
                                    );
        //_*_ catchersMit still appears undefined out here.
}

background.html:

<!doctype html>
<html><head><script type="text/javascript">
chrome.extension.onMessage.addListener(

function(message,sender,sendResponse){
                sendResponse( {msg: "info you wanted"} );
} // anonymous (1st parameter) function OUT

); // onRequest listener OUT
</script></head><body></body></html>

的manifest.json:

{
  "name": "Extension Working Title",
  "version": "1.0",
  "manifest_version": 2,
  "description": "Coolest functionality.",
        "browser_action": {
    "default_icon": "lnr_icon.png",
        "default_popup": "popup.html"
  },

  "permissions": [ "tabs","http://*/*" ],
  "background": { "page": "background.html" }
}

现在我正在使用popup.js,因为我发现它更容易调试,但如果我没有弄错的话,这个问题与内容脚本的解决方案应该不同。

1 个答案:

答案 0 :(得分:0)

假设您需要来自问题陈述(I'm trying to get the popup/popopen menu to show the user different content based off the current page-URL)的当前浏览标签网址,以下代码将获取当前的浏览标签网址,您可以play on it过滤所需信息。

chrome.tabs.query({
            "status": "complete",
            "currentWindow": true,
            "active": true
        }, function (tabs) {
            for(tab in tabs)console.log(tabs[tab].url);
});

在后台和浏览器操作HTML页面之间不需要添加消息传递。

内容脚本已经通过window.location.href

访问了网址