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