Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firefox插件SDK:Can';t在文档元素上触发click事件_Javascript_Jquery_Firefox_Firefox Addon_Firefox Addon Sdk - Fatal编程技术网

Javascript Firefox插件SDK:Can';t在文档元素上触发click事件

Javascript Firefox插件SDK:Can';t在文档元素上触发click事件,javascript,jquery,firefox,firefox-addon,firefox-addon-sdk,Javascript,Jquery,Firefox,Firefox Addon,Firefox Addon Sdk,我正在使用SDK编写Firefox插件,在页面中的元素上触发单击事件时遇到问题 我正在使用SDK页面mod模块以及jQuery。就这一问题的范围而言,我有以下几点: /* main.js */ var self = require("sdk/self"); var pageMod = require("sdk/page-mod"); pageMod.PageMod({ include: "http://example.com/*", contentScriptWhen: "r

我正在使用SDK编写Firefox插件,在页面中的元素上触发单击事件时遇到问题

我正在使用SDK页面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

因此,插件似乎无法将单击事件从自身发送到页面。有什么办法解决这个问题吗

编辑:以下是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();
        }
    }
});