如何获取点击链接的URL?
我试图通过创建Mozilla附加在生成器的插件。我需要知道的是如何获得通过附加的活动标签左点击链接的URL,并在新标签中打开它。如何获取点击链接的URL?
我知道涉及通过一个页面-MOD添加事件侦听,然后使用标签模块这个过程中,但我似乎无法得到正确的语法。
编辑:(这是我迄今为止)
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);
});
}
});
};
你必须有正确的大多是和对我的作品的代码。但是,您的内容脚本代码存在两个问题:
- 它需要调用
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"),
弗拉基米尔,这似乎是工作。我还有一个问题。当我点击谷歌文档中使用https的链接时,我得到一个安全错误,说“安全错误:https:***的内容可能无法从https:***加载数据,星星代表一个url。你知道吗?是否会导致这种情况?还有一种方法可以确定文件是否被点击,例如PDF文件吗? – Cuyware 2012-04-27 17:31:57
@Cuyware:我确定安全错误与您的扩展无关 - 这是一些Google内部问题。至于识别PDF文件 - 这是不可能的,至少在文件开始下载之前 – 2012-04-27 20:51:38
我认为href目标在标题中会有.pdf,所以我想有一种方法可以测试这个。 – Cuyware 2012-04-27 21:05:23
您能告诉我们您尝试过什么吗?该方法是正确的,所以如果没有你的代码,我不能告诉你你犯了什么错误。只有怀疑您尝试使用内容脚本中的“tabs”模块,而不是将消息发送回扩展程序,以便它可以执行此操作。 – 2012-04-26 07:48:07
弗拉基米尔,我haved编辑我原来的职位,包括我到目前为止的代码。我所需要的是能够获得点击链接的网址,然后能够操作该网址的一部分来形成不同的链接,然后将打开一个新的标签。现在有道理? – Cuyware 2012-04-26 21:50:33