0

我正在尝试获取弹出/弹出菜单以根据当前页面 URL 向用户显示不同的内容,但无法获得连接。我读过只有background.html可以访问 Chrome 框架中的 current-tabs 的 URL,所以我试图让它通过消息传递告诉我的 content-script 和我的 popup.js——背景。 html 将收到一条消息,并将在响应中包含正确的信息。Popup 应该能够使用 getBackgroundPage() 但不允许使用内容注入脚本,所以我想对两者都使用消息传递并有一个通用的解决方案。

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

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

我确信我在做一些愚蠢的事情,否则我的系统就搞砸了,但我不知道是哪个。我看到的大多数示例和问题要么需要beta发布通道功能,要么使用 v1.0 清单,使用不推荐使用的功能(来自 2011 年的问题),或者没有接受的答案。我使用的是 Chrome 24.0.1312.40 m,并且我禁用了其他扩展。

这是我们的设置方式...

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.
}

背景.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>

清单.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,因为我发现它更容易调试,但如果我没记错的话,这个问题的解决方案与内容脚本应该没有什么不同。

4

1 回答 1

0

假设您需要问题陈述(I'm trying to get the popup/popopen menu to show the user different content based off the current page-URL)中的当前浏览选项卡 URL,以下代码将获取当前浏览选项卡 URL,您可以在其上播放以过滤所需信息。

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

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

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

于 2012-12-15T18:48:55.267 回答