【发布时间】:2013-11-19 14:11:37
【问题描述】:
我正在编写一个firefox xul扩展,我必须在网页和扩展之间进行交互。
示例:如果我点击页面中的链接,我想调用 xul 扩展中的函数。 谁知道有没有办法?
非常感谢
【问题讨论】:
标签: javascript firefox webpage xul
我正在编写一个firefox xul扩展,我必须在网页和扩展之间进行交互。
示例:如果我点击页面中的链接,我想调用 xul 扩展中的函数。 谁知道有没有办法?
非常感谢
【问题讨论】:
标签: javascript firefox webpage xul
是的,您可以这样做。您需要使用 content 对象访问页面内容。
在您的扩展代码中,您可以选择所有链接,然后添加一个 eventListener:
allLinks = content.document.getElementsByTagName("a"),
for (var i=0, il=allLinks.length; i<il; i++) {
elm = allLinks[i];
elm.addEventListener("click", nowclicked, false);
}
然后你的事件监听器看起来像:
nowclicked : function () {
alert("a linked was clicked!");
}
如果您需要一个工作示例,我已经修改了 Robert Nyman 的 Link Target Finder 扩展名,以便在单击链接时添加警报。修改后的代码在linkTargetFinder.js。
【讨论】:
请参阅 Sending data from unprivileged document to chrome document 的 MDN 示例。
基本上,您必须在您的 chrome 代码中添加一个侦听器:
// The last value is a Mozilla-specific value to indicate untrusted content is allowed to trigger the event.
document.addEventListener("MyExtensionEvent", function(e) {myExtension.myListener(e);}, false, true);
并从内容脚本触发事件。请注意,以下文档是contentDocument 而不是XulDocument
var evt = document.createEvent("Events");
evt.initEvent("MyExtensionEvent", true, false);
element.dispatchEvent(evt);
【讨论】: