我正在尝试通过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);
});
}
});
};
答案 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"),