簡體   English   中英

Firefox Addon SDK:無法觸發文檔元素上的click事件

[英]Firefox Addon SDK: Can't trigger click event on document element

我正在使用SDK編寫一個Firefox插件,但我無法觸發頁面中元素的點擊事件。

我正在使用SDK page-mod模塊以及jQuery。 根據這個問題的范圍,我有以下幾點:

/* main.js */

var self = require("sdk/self");
var pageMod = require("sdk/page-mod");

pageMod.PageMod({
    include: "http://example.com/*",
    contentScriptWhen: "ready",
    contentScriptFile: [
        self.data.url("jquery.js"),
        self.data.url("myScript.js"),
    ]
});

/* myScript.js */

$(document).on('click', '#target', function() {

    var buttons = $('button'); // get all buttons on the page

    if(buttons.length) {

        buttons.each(function() {
            $(this).trigger('click');
        });

    }

});

問題是當我單擊頁面上的#trigger元素時,JS執行正常,直到它到達以下行:

$(this).trigger('click');

然后拋出以下錯誤:

訪問屬性'length'的權限被拒絕jquery-2.1.1.js:4330

因此,似乎插件無法將Click事件從其自身發送到頁面。 任何想法如何解決這個問題?

編輯:這里的參考是jQuery源代碼中相關代碼的一小塊:

// Native handler
handle = ontype && cur[ ontype ];
if ( handle && handle.apply && jQuery.acceptData( cur ) ) {
    event.result = handle.apply( cur, data ); // line 4330
    if ( event.result === false ) {
        event.preventDefault();
    }
}

最好的解決方案總是用純JavaScript替換jQuery(也執行得更快),這里是你可以重寫myScript.js方法:

document.getElementById("target").addEventListener('click', function() {
    var buttons = document.getElementsByTagName("button"); // get all buttons on the page
    if(buttons.length) {
        for (var i = buttons.length - 1; i >= 0; i--) {
          buttons[i].click();
        }
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM