1

我正在尝试通过 Mozilla Add-On Builder 创建一个附加组件。我需要知道的是如何通过加载项获取活动选项卡中左键单击链接的 URL 并在新选项卡中打开它。

我知道这个过程涉及通过 page-mod 添加一个事件监听器,然后使用 tabs 模块,但是我似乎无法获得正确的语法。

编辑:(这是我到目前为止所拥有的)

var Widget = require("widget").Widget;
var tabs = require('tabs');
var pageMod = require("page-mod");

exports.main = function() {


    pageMod.PageMod({
    include: '*',
    contentScriptWhen: 'ready',
    contentScript: "window.addEventListener('click', function(event) { self.port.emit( 'click',event.target.toString() )},false)",
    onAttach: function(worker) {
        worker.port.on("click", function(urlClicked) {
            tabs.open(urlClicked);

        });
     }

    }); 

};
4

1 回答 1

0

您那里的代码大部分是正确的并且对我有用。但是,您的内容脚本代码存在两个问题:

  • 它需要调用event.preventDefault()以防止浏览器跟踪链接。否则,链接页面将同时加载到当前选项卡和您的扩展程序打开的新选项卡中。
  • 它不检查是否event.target实际上是一个链接。它可能是链接的子节点,也可能根本不是链接。

总之,您的内容脚本应如下所示:

window.addEventListener("click", function(event)
{
  var link = event.target;
  while (link && link.localName != "a")
    link = link.parentNode;

  if (link)
  {
    self.port.emit("click", link.href);
    event.preventDefault();
  }
}, false);

对于像这样的非平凡内容脚本,您不应使用contentScript参数,而应将其放入data/目录中自己的文件中。然后,您可以contentScriptFile在构造面板时使用参数:

contentScriptFile: require("self").data.url("contentScript.js"),
于 2012-04-27T05:44:06.827 回答