【问题标题】:interaction beetween firefox xul estension and a web pagefirefox xul 扩展和网页之间的交互
【发布时间】:2013-11-19 14:11:37
【问题描述】:

我正在编写一个firefox xul扩展,我必须在网页和扩展之间进行交互。

示例:如果我点击页面中的链接,我想调用 xul 扩展中的函数。 谁知道有没有办法?

非常感谢

【问题讨论】:

    标签: javascript firefox webpage xul


    【解决方案1】:

    是的,您可以这样做。您需要使用 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

    【讨论】:

    • 嗯,我有一些问题。我可以有我的链接:Photo Userlist 我必须做什么写在我的扩展名的.js文件中?而不是警报(“链接”);我可以写 retrivePhoto();
    • 我不太明白您要做什么。你想让扩展访问链接中的实际照片(二进制图像数据)吗?
    • 对不起,我的英语说得不太好,我想做的是从一个网页调用,我创建了我的 firefox 扩展的函数,而不是我导入的文件中的函数在页面内,但我为我的扩展程序创建的 .js
    • 是的,你可以这样做。看看我链接到的例子。 nowclicked() 函数位于扩展的 javascript 中。如果您不想使用事件执行该功能,那么您可以按照@Kashif 发布的方法(不太安全)。
    【解决方案2】:

    请参阅 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多