[英]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.