我已经制作了一个Chrome扩展程序,可以从某个网站下载一些内容。基本上,它遍历我感兴趣的所有链接,将它们存储在一个数组中,然后逐个下载。问题是,存储是在一个名为download.js
的单独文件中完成的。然后,我继续使用chrome.extension.sendRequest
向 popup.js 发送消息。我用chrome.extension.onRequest.addListener
在 popup.js 中选择它。当我不切换我的标签时,它工作得很好,但我希望它在我同时浏览其他东西的同时工作。我可以看到代码通过控制台日志将请求发送到 popup.js ,但我无法看到 popup.js 中发生了什么,因为当我切换弹出控制台后立即关闭。
download.js :
// logic behind link gathering and storing that works
...
gatherLinks().then(function() {
// logs is defined, don't worry
chrome.extension.sendRequest(logs);
)};
popup.js :
document.addEventListener('DOMContentLoaded', function() {
var downloadButton = document.getElementById('download');
downloadButton.addEventListener('click', downloadStuff);
});
function downloadStuff() {
chrome.tabs.executeScript({
file: 'jquery-3.1.1.min.js'
});
chrome.tabs.executeScript({
file: 'download.js'
});
chrome.extension.onRequest.addListener(function(message_logs) {
message_logs.forEach(function(log) {
chrome.downloads.download({
url: log.link,
filename: log.filename
});
}
}
的manifest.json :
{
...
"permissions": [
"tabs",
"activeTab",
"downloads"
],
"background": {
"scripts": ["download.js"]
}
}
答案 0 :(得分:2)
当您切换时,弹出窗口将关闭。
它不会隐藏弹出窗口,弹出窗口正确关闭,就像关闭选项卡一样。因此,它的代码不再执行,没有什么可以收听你的消息了。
这是background(或更好,event)页面的作业。它们无形地存在,与您使用浏览器所做的事情无关。因此,当弹出窗口可能不存在时,这样的页面应该是接收命令的页面。
此外,
如果您的内容脚本和后台脚本相同,那么您有99%的可能性做错了。不要试图在两者中重复使用代码,除非它是一些辅助库 - 主逻辑在那些非常不同的上下文中永远不应该相同。