Javascript 如何在弹出窗口关闭后保持扩展脚本运行?
假设我正在为firefox/chrome制作一个插件/扩展。我有一个带有一个按钮的弹出窗口。看起来是这样的: 当点击按钮时,我希望执行一些功能,我希望即使在弹出窗口失去焦点并消失后,它仍能继续执行 正常行为是在弹出窗口失去焦点时立即关闭它。因此,如果我单击按钮,然后立即单击其他内容,弹出窗口将消失,我会在控制台中看到以下消息:Javascript 如何在弹出窗口关闭后保持扩展脚本运行?,javascript,google-chrome,firefox-addon,firefox-addon-webextensions,Javascript,Google Chrome,Firefox Addon,Firefox Addon Webextensions,假设我正在为firefox/chrome制作一个插件/扩展。我有一个带有一个按钮的弹出窗口。看起来是这样的: 当点击按钮时,我希望执行一些功能,我希望即使在弹出窗口失去焦点并消失后,它仍能继续执行 正常行为是在弹出窗口失去焦点时立即关闭它。因此,如果我单击按钮,然后立即单击其他内容,弹出窗口将消失,我会在控制台中看到以下消息: Cannot send function call result: other side closed connection (calldata: ({path:"bo
Cannot send function call result: other side closed connection (calldata:
({path:"bookmarks.getTree", args:[]}))
检查或使用onbeforeunload工作时没有错误
下面是一个简单的例子:
Manifest.json
{
"manifest_version": 2,
"name": "delete bookmarks",
"version": "0.1",
"browser_action": {
"default_popup": "popup.html"
},
"permissions": ["management", "bookmarks", "http://*/"],
"background": {
"scripts": ["doStuff.js"]
},
"content_scripts": [{
"matches": ["<all_urls>"],
"js": ["doStuff.js"]
}]
}
{
“清单版本”:2,
“名称”:“删除书签”,
“版本”:“0.1”,
“浏览器操作”:{
“默认弹出窗口”:“popup.html”
},
“权限”:[“管理”、“书签”、“http://*/”],
“背景”:{
“脚本”:[“doStuff.js”]
},
“内容脚本”:[{
“匹配项”:[“”],
“js”:[“doStuff.js”]
}]
}
popup.html
<!DOCTYPE html>
<html>
<button id="doStuff">doStuff</button>
<script src="doStuff.js"></script>
</html>
多斯塔夫
doStuff.js
var button = document.getElementById("doStuff");
button.addEventListener("click", function() {
doStuff();
}, false);
function doStuff(){
chrome.bookmarks.getTree(deleteAllBookmarks);
}
function deleteAllBookmarks(result){ //JUST AN EXAMPLE!
//delete/remove ALL bookmarks
for(var i = 0 ; i < result[0].children.length; i ++){ //get children of root
var child = result[0].children[i];
for(var j = 0 ; j < child.children.length; j++){ //get children of children of root
var childchild = child.children[j];
console.log("deleting id " + childchild.id);
chrome.bookmarks.removeTree(childchild.id, success); //delete everything
}
}
}
function success(result){
alert("Success");
}
var按钮=document.getElementById(“doStuff”);
addEventListener(“单击”,函数(){
doStuff();
},假);
函数doStuff(){
chrome.bookmarks.getTree(deleteAllBookmarks);
}
函数deleteAllBookmarks(result){//只是一个例子!
//删除/删除所有书签
对于(var i=0;i
因此,我再次尝试在父html页面关闭后完成javascript代码的执行。看起来这应该很容易,因为我正在加载脚本作为内容脚本和背景脚本,但我无法理解它,并且没有匹配的SO帖子。非常感谢您的帮助。您应该使用chrome。
按下按钮时,弹出窗口
将向后台
发送消息,后台
将监听并执行操作
如果只使用弹出页面
,则无法执行此操作。
如果您想使用
活动页面
,则需要在该页面中创建侦听器(使用内容脚本添加脚本
)。您不应将同一JS文件用于弹出JS、背景脚本和内容脚本。你最好每个目的都有一个文件。然后,弹出式触发器检测到单击按钮,向执行长时间处理的后台脚本发送消息,并可以将消息发送回弹出式触发器。看看我的答案,我在这里解释了这个过程,它应该会有帮助: