代码之家  ›  专栏  ›  技术社区  ›  Cheekysoft Moz Morris

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

  •  7
  • Cheekysoft Moz Morris  · 技术社区  · 16 年前

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

    有没有一种方法,在不轮询DOM的情况下,我的扩展可以知道页面的初始化过程已经完成?

    2 回复  |  直到 16 年前
        1
  •  11
  •   Andrea Fiore    16 年前

    this post

    网页 (假设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有第四个参数,表示它将接受来自不受信任代码的事件。但是,您可以有选择地添加此事件侦听器,这样只有您网站中受信任的页面才能将值传递给扩展。

        2
  •  1
  •   robertc    16 年前

    similar to what this GreaseMonkey script does ( description

    Firebug为其Net面板做了类似的事情,但代码库有点吓人:)我还看了一下 Firebug Lite watchXHR function ,但这段代码对我来说有点太狡猾了,如果你能解决的话,请告诉我。

    推荐文章