2011-07-07 9 views
0

私の最終目標は、サイトにHTMLボタンを挿入し、拡張機能のカスタムコードモジュールで定義された関数を起動させるfirefox拡張を作成することです。Firefoxの拡張機能にHTMLボタンを挿入してイベントをトリガーするには?

私はこのquestionにニコライの答えを実装しようとしました。

0x80070057が(NS_ERROR_ILLEGAL_VALUE)[nsIDOMEventTarget.dispatchEvent]「nsresult: 『0x80070057が(』キャッチされない例外を:[例外を...」コンポーネントが故障コードを返し、私はボタンをクリックすると、私はFirebugの中で次のエラーを取得するのに作成しましたNS_ERROR_ILLEGAL_VALUE)」場所: "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"; 
} 

どれでもどのように私はこれを修正することができますか?また、私はブラウザエクステンションを開発するために全く新しいことに言及する必要があります。

答えて

0

最後にそれを働かせました。 2番目のリスナーを追加する必要はなく、1行しかかかりませんでした。 button.addEventListener( "click"、foo、false);

以前はfooの代わりにfoo()を試していましたが、失敗しましたが、今はうまくいきます。

1

button.setAttribute('onclick', 'dispatchEvent(event)')は、ボタンがクリックされたときにclickイベントを受け取り、それをディスパッチしようとします。しかし、2回目のイベントのディスパッチは許可されません。何がしたいように見えることはこれです:

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

これは、周囲のコードの変数へのアクセスがあります関数クロージャを作成 - buttonevent含むを。閉鎖の詳細を読む:http://www.javascriptkit.com/javatutors/closures.shtml

+0

私はこれを実装しようとすると、 "uncaught exception:[Exception ..."コンポーネントが利用できません "nsresult:" 0x80040111(NS_ERROR_NOT_AVAILABLE) "場所:" JSフレーム:: chrome:/ /mezz/content/overlay.js :: :: line 43 "data:no" " 43行目はあなたが提案したコードを指します(" button.onclick = function()... ")。このエラーを検出すると、わからないFirefoxの非互換性を示唆するページが表示されました。 – Zaheer

+0

@ user773953:あのボタンをコンテンツページに挿入しています。はい、 'onclick'は利用できませんので、代わりに' addEventListener'を使うべきです(とにかく良いアイデアです)。私はこれを反映するために私の答えを編集しました。 –

+0

私は何かが足りないと思う。私は今、エラーは表示されませんが、ボタンは機能しません。クリックすると何も起こりません。明確にするために、私の元のコードの最後の3行はまだまあまあですか? "var docx = event.original ..."から始まります。 – Zaheer

関連する問題