代码之家  ›  专栏  ›  技术社区  ›  Mridang Agarwalla

开发Firefox扩展时在页面中执行注入的Javascript代码

  •  3
  • Mridang Agarwalla  · 技术社区  · 14 年前

    我正在开发一个Firefox扩展,它在状态栏中放置了一个按钮。单击按钮时,扩展将向当前页中注入一些Javascript。这个Javascript有一个函数,我想用一些参数调用它。我已经成功地注入了代码,通过Firebug检查了页面,并验证了JS已经被注入。如何从扩展调用页面中的Javascript函数?

    --更多信息

    下面是我用来注入Javascript的代码:

    var doc = window.content.document;
    
    //Add the script
    var visibilityJS = doc.createElement("script");
    visibilityJS.setAttribute("type", "text/javascript");
    visibilityJS.setAttribute("charset", "UTF-8");
    visibilityJS.setAttribute("src", "chrome://visibility/content/scripts/visibility.js");
    head.appendChild(visibilityJS);
    
    //Call the function
    alert("Executing testfunction");
    window.content.document.defaultView.testFunction();
    

    …还有我要注入的JS文件中的代码。i、 e.可见性.js

    window.testFunction = function() {
        alert("Message");
    }
    

    谢谢。

    2 回复  |  直到 14 年前
        1
  •  4
  •   Community CDub    8 年前

    这奏效了。我不知道技术细节。我从费利克斯那里得到了部分解决方案 here .

    window.content.document.defaultView.wrappedJSObject.testFunction();
    
        2
  •  2
  •   Felix Kling    14 年前

    如果在注入的代码中声明全局变量(或显式设置 window 对象),则从扩展中获取对此元素的引用的一种方法是通过 gBrowser 对象:

    gBrowser.contentDocument.defaultView.yourObject
              ^-- HTML document  ^
                  object         |-- window object
    

    不过,当你使用 窗口 document 在你的代码里。根据上下文,它可能引用Firefox窗口或website窗口对象。