Как вызвать событие от вставленной HTML-кнопки в расширении Firefox? - PullRequest
0 голосов
/ 08 июля 2011

Моя конечная цель - создать расширение firefox, которое вставит кнопку HTML на сайт и запустит функцию, определенную в модуле пользовательского кода в моем расширении.

Я пытался реализовать ответ Николая на этот вопрос . Когда я нажимаю кнопку, которую создал, я получаю следующую ошибку в Firebug:

"неосторожное исключение: [Exception ..." Компонент возвратил код ошибки: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIDOMEventTarget.dispatchEvent] "nsresult:" 0x80070057 (NS_ERROR_ILLEGAL_VALUE) "location:" JS

Мой код:

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 ]

1 голос
/ 08 июля 2011

button.setAttribute('onclick', 'dispatchEvent(event)') не будет делать то, что вы думаете, что он будет делать - при нажатии кнопки он принимает событие click и пытается отправить его. Однако отправка события во второй раз не разрешена. То, что вы, кажется, хотите, это:

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

Это создает закрытие функции, которое будет иметь доступ к переменной окружающего кода, включая button и event. Дальнейшее чтение по закрытиям: http://www.javascriptkit.com/javatutors/closures.shtml

0 голосов
/ 10 июля 2011

Наконец получил его на работу.Мне не нужно было добавлять второго слушателя, и это заняло только одну строку: button.addEventListener ("click", foo, false);

Я ранее пробовал foo () вместо просто foo, и это не удалось, нотеперь работает отлично.

...