Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更改选项卡后,一旦弹出窗口关闭,则无法在弹出窗口中接收消息_Javascript_Google Chrome Extension_Download_Tabs - Fatal编程技术网

Javascript 更改选项卡后,一旦弹出窗口关闭,则无法在弹出窗口中接收消息

Javascript 更改选项卡后,一旦弹出窗口关闭,则无法在弹出窗口中接收消息,javascript,google-chrome-extension,download,tabs,Javascript,Google Chrome Extension,Download,Tabs,我做了一个chrome扩展,可以从某个网站下载一些东西。基本上,它会遍历我感兴趣的所有链接,将它们存储在一个数组中,然后逐个下载。问题是,存储是在一个名为download.js的单独文件中完成的。然后,我继续使用chrome.extension.sendRequest向popup.js发送消息。我在popup.js中使用chrome.extension.onRequest.addListener获取它。当我不切换我的账单时,它工作得很好,但我希望它在我浏览其他东西的同时工作。我可以看到代码通过控

我做了一个chrome扩展,可以从某个网站下载一些东西。基本上,它会遍历我感兴趣的所有链接,将它们存储在一个数组中,然后逐个下载。问题是,存储是在一个名为
download.js
的单独文件中完成的。然后,我继续使用
chrome.extension.sendRequest
向popup.js发送消息。我在popup.js中使用
chrome.extension.onRequest.addListener
获取它。当我不切换我的账单时,它工作得很好,但我希望它在我浏览其他东西的同时工作。我可以看到代码通过控制台日志将请求发送到popup.js,但我看不到popup.js中发生了什么,因为当我切换选项卡时,弹出控制台立即关闭

下载.js:

//链接收集和存储背后的逻辑
...
gatherLinks()。然后(函数(){
//日志已定义,不用担心
chrome.extension.sendRequest(日志);
)};
popup.js:

document.addEventListener('DOMContentLoaded',function(){
var downloadButton=document.getElementById('download');
downloadButton.addEventListener('click',downloadStuff');
});
函数downloadStuff(){
chrome.tabs.executeScript({
文件:“jquery-3.1.1.min.js”
});
chrome.tabs.executeScript({
文件:“download.js”
});
chrome.extension.onRequest.addListener(函数(消息日志){
消息\u logs.forEach(函数(日志){
chrome.downloads.download({
url:log.link,
文件名:log.filename
});
}
}
manifest.json:

{
...   
“权限”:[
“标签”,
“活动标签”,
“下载”
],
“背景”:{
“脚本”:[“download.js”]
}
}

当您切换到其他位置时,弹出窗口将关闭

它不会隐藏弹出窗口,弹出窗口是正确关闭的,因为您将关闭一个选项卡。因此,它的代码不再执行,并且没有任何内容可以监听您的消息

这是针对(或更好的)页面的作业。这些页面的存在是不可见的,与您使用浏览器的操作无关。因此,当弹出窗口可能不存在时,此类页面应该是接收命令的页面

而且

可怕的警告!
如果您的内容脚本和背景脚本相同,则99%的可能性是您做错了什么。不要尝试在这两种脚本中重复使用代码,除非它是一些辅助库-在这些非常不同的上下文中,主逻辑不应相同。

当您切换到其他位置时,弹出窗口将关闭

它不会隐藏弹出窗口,弹出窗口是正确关闭的,因为您将关闭一个选项卡。因此,它的代码不再执行,并且没有任何内容可以监听您的消息

这是针对(或更好的)页面的作业。这些页面的存在是不可见的,与您使用浏览器的操作无关。因此,当弹出窗口可能不存在时,此类页面应该是接收命令的页面

而且

可怕的警告!
如果您的内容脚本和背景脚本相同,则99%的可能性是您做错了什么。不要尝试在这两种脚本中重复使用代码,除非它是一些辅助库-在这些非常不同的上下文中,主逻辑不应相同。

好的,我在中的“权限”部分为正在检查的站点添加了权限json并删除了后台选项,但其工作方式仍然相同。好的,我在manifest.json的权限部分为我正在检查的站点添加了权限,并删除了后台选项,但其工作方式仍然相同。