Firefox addon 如何获取已点击链接的URL?

Firefox addon 如何获取已点击链接的URL?,firefox-addon,firefox-addon-sdk,Firefox Addon,Firefox Addon Sdk,我正试图通过Mozilla插件生成器创建一个插件。我需要知道的是如何通过附加组件获取活动选项卡中左键单击链接的URL,并在新选项卡中打开它 我知道这个过程涉及到通过页面mod添加eventlistener,然后使用tabs模块,但是我似乎无法获得正确的语法 编辑:这就是我到目前为止所拥有的 var Widget=requirewidget.Widget; var制表符=需要“制表符”; var pageMod=要求页面mod; exports.main=函数{ pageMod.pageMod{

我正试图通过Mozilla插件生成器创建一个插件。我需要知道的是如何通过附加组件获取活动选项卡中左键单击链接的URL,并在新选项卡中打开它

我知道这个过程涉及到通过页面mod添加eventlistener,然后使用tabs模块,但是我似乎无法获得正确的语法

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

var Widget=requirewidget.Widget; var制表符=需要“制表符”; var pageMod=要求页面mod; exports.main=函数{ pageMod.pageMod{ 包括:“*”, contentScriptWhen:'准备就绪', contentScript:window.addEventListener'click',functionevent{self.port.emit'click',event.target.toString},false, onAttach:函数工作者{ worker.port.onclick,functionurlClicked{ 单击tabs.openurl; }; } }; };
你那里的代码基本上是正确的,适合我。但是,内容脚本代码存在两个问题:

它需要调用event.preventDefault以防止浏览器跟随该链接。否则,将在当前选项卡和扩展打开的新选项卡中加载链接页面。 它不检查event.target是否实际上是一个链接。它可能是链接的子节点,也可能根本不是链接。 总之,您的内容脚本应该如下所示:

window.addEventListenerclick,functionevent { var link=event.target; 而link&&link.localName!=a link=link.parentNode; 如果链接 { self.port.emitclick,link.href; 违约事件; } },假; 对于这样一个非常重要的内容脚本,您不应该使用contentScript参数,而应该将其放入data/目录中自己的文件中。然后,可以在构造面板时使用contentScriptFile参数:

contentScriptFile:requireself.data.urlcontentScript.js,
你能告诉我们你试过什么吗?这种方法是正确的,因此如果没有您的代码,我无法告诉您哪里出错。只是怀疑你试图从内容脚本中使用tabs模块,而不是将消息发送回扩展,这样它就可以这样做。Wladimir,我已经编辑了我的原始帖子,以包含到目前为止的代码。我需要的是能够点击链接的url,然后能够操纵该url的一部分,形成一个不同的url,然后在新标记中打开。现在有意义了吗?瓦拉迪米尔,这似乎起作用了。我还有一个问题。当我单击使用https的Google Documents上的链接时,我会看到一个安全错误,上面写着“安全错误:https:**上的内容可能无法从https:**加载数据,其中的星号表示url。你知道这是什么原因吗?还有一种方法可以确定文件是否被点击,比如PDF文件吗?@Cuyware:我很确定安全性错误与您的扩展无关——这是一些谷歌内部的问题。至于识别PDF文件-这是不可能的,至少在文件开始下载之前是不可能的。我想href target的标题中应该有.PDF,所以我想有一种方法可以测试它。@Cuyware:处理HTTP时,文件扩展名是没有意义的-文件类型由内容类型标题决定。http://example.com/foo.pdf 可以是常规HTML页面和http://example.com/getDoc?id=123 可以是PDF文件。我明白了。我已经解决了这个问题,你的帮助起到了作用。非常感谢