如何在firefox扩展中从注入的HTML按钮触发事件?

时间:2011-07-07 22:29:32

标签: javascript firefox firefox-addon mozilla

我的最终目标是创建一个firefox扩展,将HTML按钮插入到网站上,然后在我的扩展程序中触发自定义代码模块中定义的函数。

我试图实现Nickolay对此question的回答。当我点击我创建的按钮时,我在Firebug中收到以下错误:

“未捕获异常:[Exception ...”组件返回失败代码:0x80070057(NS_ERROR_ILLEGAL_VALUE)[nsIDOMEventTarget.dispatchEvent]“nsresult:”0x80070057(NS_ERROR_ILLEGAL_VALUE)“location:”JS frame ::“

我的代码:

onPageLoad: function(aEvent) {
    Components.utils.import("chrome://my_ext/content/writeFile.jsm", my_ext);
    //alert(foo());  - foo() is an function in the above code module I import


    var doc = aEvent.originalTarget; // doc is document that triggered "onload" event

    var event = doc.createEvent("Events");
    event.initEvent("my-custom-event", true, true);

    var fblike = doc.getElementById("LikePluginPagelet");
    var button = doc.createElement("input");
    button.setAttribute("type", "button");
    button.setAttribute("value", "My Button");
    button.setAttribute('onclick', 'dispatchEvent(event)');

    fblike.appendChild(button, fblike);

    var docx = event.originalTarget;
    if(docx && docx.addEventListener)
        docx.addEventListener("my-custom-event", function() {alert(foo()); }, false);
},

我的writeFile.jsm:

var EXPORTED_SYMBOLS = ["foo"];

function foo() {
    return "foo test";
}

我对如何解决此问题有任何想法?我还要提一下,我是开发浏览器扩展的新手。

2 个答案:

答案 0 :(得分:1)

button.setAttribute('onclick', 'dispatchEvent(event)')将无法执行您认为会执行的操作 - 单击按钮时,它将执行click事件并尝试调度它。但是,不允许第二次调度事件。你似乎想要的是:

button.addEventListener("click", function() {
  button.dispatchEvent(event);
}, false);

这将创建一个函数闭包,可以访问周围代码的变量 - 包括buttonevent。关于闭包的进一步阅读:http://www.javascriptkit.com/javatutors/closures.shtml

答案 1 :(得分:0)

终于开始工作了。我不需要添加第二个侦听器,它只需要一行: button.addEventListener(“click”,foo,false);

我之前尝试过foo()而不仅仅是foo而且失败但现在工作得很好。