Firefox Addon SDK:无法触发文档元素上的click事件

时间:2015-04-23 23:41:00

标签: javascript jquery firefox firefox-addon firefox-addon-sdk

我正在使用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');

然后抛出以下错误:

  

拒绝访问财产'长度' jquery-2.1.1.js:4330

所以看起来插件无法从页面上发送点击事件。任何想法如何解决这个问题?

编辑:这里的参考是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();
    }
}

1 个答案:

答案 0 :(得分:1)

最好的解决方案总是用纯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();
        }
    }
});