正如它清楚地读到的那样,
我想让我的弹出窗口成为扩展启动的触发器。
我的扩展基本上可以在background.html
中完全执行。 Background.html
需要网页上的一些信息,因此请使用邮件传递将所需内容从contentscript.js
传递到background.html
。这对于在所有页面上运行都变得非常繁重,所以我希望此扩展仅在单击图标后启动,并在popup.html
中显示我可以直接从background.html
拉出的信息。
Lemme知道我是否不清楚。
答案 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);
});
});
});
}
}));
需要记住的是,弹出窗口可能在收到数据时已经关闭,因此您可能需要添加一些错误处理。
第二个问题是避免将内容脚本两次注入同一页面。这可能具有挑战性,因此我建议如果您的内容脚本很小,那么只需将其注入所有页面(在清单中)。