【问题标题】:Open all links on page in new tabs and track those tabs在新标签中打开页面上的所有链接并跟踪这些标签
【发布时间】:2015-04-18 15:04:09
【问题描述】:

我知道我无法使用 SDK 直接从 Firefox 插件中的主函数访问 DOM,因此我也无法直接从 a 标签获取 href 值。如何让我的插件将页面上的所有链接作为新选项卡打开并将它们添加到数组中?我不希望跟踪用户手动打开的新标签,只跟踪由这个插件创建的标签。

【问题讨论】:

  • 你已经尝试过什么代码?请edit问题包含您的源代码。请参阅What topics can I ask about here?How do I ask a good question?How to create a Minimal, Complete, and Verifiable example。如果我们要尝试验证我们的解决方案是否适合您,那么如果我们从您的代码开始而不是必须全部完成,那么这样做会容易得多。没有这样的代码,就没有动力为您找到答案。
  • 您可以使用 Firefox 插件的内容脚本访问页面内容。如果您像@Makyen 所说的那样提供更多信息,我们可以为您提供帮助。
  • @Makyen 我问了一个问题here。如果你对此有任何想法,你能帮助我吗?

标签: javascript firefox-addon firefox-addon-sdk


【解决方案1】:

不久前部分解决了这个问题,所以我想我会指出我所知道的。

由于主脚本无法访问 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
}

至于跟踪标签,我想保留一个工人列表将是完成此任务的合适方法。我还没有尝试过这部分,因为我不得不把这个项目搁置一段时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 2011-09-29
    • 2011-09-11
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多