javascript - firefox扩展和页面javascript之间的通信

标签 javascript firefox firefox-addon

我正在开发一个基于 web 的 javascript/html 应用程序,带有一个姐妹 firefox 扩展。

应用程序的 page-javascript 在页面加载后立即执行一些 XHR 调用,以引入并显示页面所需的所有内容。

有没有办法在不轮询 DOM 的情况下让我的扩展程序知道页面的初始化过程已完成?

最佳答案

确实是个有趣的问题..

我刚刚通过 this post 了解到在 MozillaZine 的论坛上有一个简单的方法来完成这个。该技术基本上包括在网页中定义自定义 DOM 元素,用一些任意属性填充它,然后将其用作自定义事件的目标。然后可以捕获该事件并将其用于将值从网页传递到扩展程序。

网页(假设jquery可用)

<script type="text/javascript">
    $(document).ready(function(){

    $.get("http://mywebsite.net/ajax.php",function(data){
         //[...]process data

        //define a custom element and append it to the document

         var element = document.createElement("MyExtensionDataElement");
         element.setAttribute("application_state", "ready");
         document.documentElement.appendChild(element);

         //create a custom event and dispatch it 
         // using the custom element as its target

         var ev = document.createEvent("Events");
         ev.initEvent("MyExtensionEvent", true, false);
         element.dispatchEvent(ev);
    });             
  });
</script>

Chrome 代码:

function myListener(e) {
   alert("data:" + e.target.getAttribute("application_state"));
}

function on_specialpage_load(event) {
  if (event.originalTarget instanceof HTMLDocument && 
      event.originalTarget.location.href == "http://mywebsite.net/myspecialpage.html") {

    var doc=event.originalTarget;
    doc.addEventListener("MyExtensionEvent", myListener, false, true);
  }
}
gBrowser.addEventListener("DOMContentLoaded",on_specialpage_load,false);

注意 doc.addEventListener 有第四个参数,表明它将接受来自不受信任代码的事件。但是,您可以有选择地添加此事件监听器,这样只有您站点中受信任的页面才能将值传递给扩展程序。

关于javascript - firefox扩展和页面javascript之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1305164/

相关文章:

css - 我可以在不同浏览器中获得一致的 CSS 颜色吗?

javascript - 音频标签在 Firefox 附加组件中不起作用

javascript - 嵌套悬停事件,只适用于最直接悬停的元素

firefox - 在Firefox中缓冲YouTube视频(API)

macos - SSH -L 连接成功,但本地主机端口转发不起作用 "channel 3: open failed: connect failed: Connection refused"

javascript - 使用 Firefox AddOn 中的 Web Crypto API

javascript - 从 firefox 扩展的数据目录播放音频

Javascript:匹配包含注释字符的整行

javascript - 如何使用javascript在下拉菜单中显示下拉菜单项?

javascript - 鼠标移出并关闭对话框