Chrome扩展程序:仅在单击弹出窗口时才使我的扩展程序执行,并在弹出窗口中显示结果

时间:2011-05-18 15:24:47

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

正如它清楚地读到的那样,

我想让我的弹出窗口成为扩展启动的触发器。 我的扩展基本上可以在background.html中完全执行。 Background.html需要网页上的一些信息,因此请使用邮件传递将所需内容从contentscript.js传递到background.html。这对于在所有页面上运行都变得非常繁重,所以我希望此扩展仅在单击图标后启动,并在popup.html中显示我可以直接从background.html拉出的信息。

Lemme知道我是否不清楚。

1 个答案:

答案 0 :(得分:1)

检测弹出窗口的打开时间非常简单,因为每次打开弹出窗口时,它内部的代码都会执行。因此,您需要做的就是在弹出代码的开头向后台页面发出请求。

第二部分是按需注入内容脚本(据我所知,进入当前标签)。

所以整个扩展结构应该是这样的:

<强> popup.html

//this will run each time popup opens
chrome.extension.sendRequest("start", function(data) {
    //display data received from background page through content script
});

<强> background.html

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    if(request == "start") {
        chrome.tabs.getSelected(null, function(tab) {
            chrome.tabs.executeScript(tab.id, {file: "contentscript.js"}, function() {
                //content script is injected, send a request to it
                chrome.tabs.sendRequest(tab.id, "get_data", function(data){
                    //content script sent response back with data we need to display in popup
                    sendResponse(data);
                });
            });
        });
    }
}));

需要记住的是,弹出窗口可能在收到数据时已经关闭,因此您可能需要添加一些错误处理。

第二个问题是避免将内容脚本两次注入同一页面。这可能具有挑战性,因此我建议如果您的内容脚本很小,那么只需将其注入所有页面(在清单中)。