Javascript 在新选项卡中打开页面上的所有链接并跟踪这些选项卡

Javascript 在新选项卡中打开页面上的所有链接并跟踪这些选项卡,javascript,firefox-addon,firefox-addon-sdk,Javascript,Firefox Addon,Firefox Addon Sdk,我知道我无法使用SDK从firefox插件中的主函数直接访问DOM,因此我也无法直接从a标记获取href值。如何使我的插件以新选项卡的形式打开页面上的所有链接,并将其添加到数组中?我不想跟踪用户手动打开的新选项卡,只想跟踪此插件创建的选项卡。前一段时间部分解决了这个问题,所以我想我会指出我知道的 由于主脚本无法访问DOM本身,因此它可以将辅助程序附加到当前选项卡。工作者可以读取所有链接并将其存储为列表,然后将该列表发送回加载项。然后,该插件可以打开指向该列表中所有链接的新选项卡 在main中,向

我知道我无法使用SDK从firefox插件中的主函数直接访问DOM,因此我也无法直接从a标记获取href值。如何使我的插件以新选项卡的形式打开页面上的所有链接,并将其添加到数组中?我不想跟踪用户手动打开的新选项卡,只想跟踪此插件创建的选项卡。

前一段时间部分解决了这个问题,所以我想我会指出我知道的

由于主脚本无法访问DOM本身,因此它可以将辅助程序附加到当前选项卡。工作者可以读取所有链接并将其存储为列表,然后将该列表发送回加载项。然后,该插件可以打开指向该列表中所有链接的新选项卡

在main中,向选项卡添加内容脚本:

function attachScript() {
  var worker = tabs.activeTab.attach({
    contentScriptFile: self.data.url("content-script.js")
  });
  worker.port.on("links", function(links) {
    for each(var l in links) {
        tabs.open(l);
    }
  }); // Start listening for links sent by the tab's worker
  worker.port.emit("get-links"); // Request links from worker
}
在内容脚本中,收到get links消息后,读取所有链接并使用端口将其发送回:

self.port.on("get-links", handleMessage); // Start listening for requests for links on page

function handleMessage(message) {
  var anchors = document.getElementsByTagName("a"); // Get all a elements on page
  alert(anchors.length); // Report quantity of a elements found
  var hrefs = [];
  for each (var a in anchors) {
    hrefs.push(a.href); // Add all target urls of a elements to array
  }
  self.port.emit("links", hrefs); // Send array of urls to add-on script
}

至于跟踪标签,我认为保存一份工作人员列表是实现这一目标的合适方式。我还没有试过那个部分,因为我不得不暂停这个项目一段时间。

您已经试过哪些代码了?请将问题添加到源代码中。请看,还有。如果我们要尝试验证我们的解决方案是否适合您,那么如果我们从您的代码开始,而不必全部编写代码,那么这样做会容易得多。如果没有这样的代码,你就没有动力为自己找到答案。你可以使用Firefox插件的内容脚本访问页面内容。如果你像@Makyen所说的那样提供更多信息,我们可以帮助你。@Makyen我问了一个问题。如果你对此有任何想法,你能帮我吗。