如何获取点击链接的URL?

时间:2012-04-26 02:59:43

标签: firefox-addon firefox-addon-sdk

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

我知道这个过程涉及通过page-mod添加一个eventlistener然后使用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);

        });
     }

    }); 

};

1 个答案:

答案 0 :(得分: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"),