一旦弹出窗口关闭标签更改

时间:2016-11-01 09:30:34

标签: javascript google-chrome-extension download tabs

我已经制作了一个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"]
  }
}

1 个答案:

答案 0 :(得分:2)

当您切换时,弹出窗口将关闭。

它不会隐藏弹出窗口,弹出窗口正确关闭,就像关闭选项卡一样。因此,它的代码不再执行,没有什么可以收听你的消息了。

这是background(或更好,event)页面的作业。它们无形地存在,与您使用浏览器所做的事情无关。因此,当弹出窗口可能不存在时,这样的页面应该是接收命令的页面。

此外,

大警告!

如果您的内容脚本和后台脚本相同,那么您有99%的可能性做错了。不要试图在两者中重复使用代码,除非它是一些辅助库 - 主逻辑在那些非常不同的上下文中永远不应该相同。