我有一组要运行的关键事件,但是在扩展程序中执行它们时遇到了一些麻烦。
目标是在触发自动完成列表的输入元素上触发这些事件,它将选择列表中的第一个:
var = document.getElementById(elementID);
// END KEY
var e = document.createEvent('KeyboardEvent');
e.initKeyEvent('keydown', true, true, window, false, false, false, false, 35, 0);
element.dispatchEvent(e);
var e = document.createEvent('KeyboardEvent');
e.initKeyEvent('keyup', true, true, window, false, false, false, false, 35, 0);
element.dispatchEvent(e);
// ARROW DOWN KEY
var e = document.createEvent('KeyboardEvent');
e.initKeyEvent('keydown', true, true, window, false, false, false, false, 40, 0);
element.dispatchEvent(e);
var e = document.createEvent('KeyboardEvent');
e.initKeyEvent('keyup', true, true, window, false, false, false, false, 40, 0);
element.dispatchEvent(e);
//ENTER KEY
var e = document.createEvent('KeyboardEvent');
e.initKeyEvent('keydown', true, true, window, false, false, false, false, 13, 0);
element.dispatchEvent(e);
var e = document.createEvent('KeyboardEvent');
e.initKeyEvent('keyup', true, true, window, false, false, false, false, 13, 0);
element.dispatchEvent(e);
如果我在萤火虫上运行此程序,它将完全满足我的要求。
但是当我从扩展程序运行它时,我在控制台上看到一条错误消息:
拒绝访问属性“ type”的权限指向该网站的jQuery文件。
我不明白是什么触发了该错误,因为它在Firebug中毫无麻烦地工作。
发生这种情况的一个示例是在www.kayak.com上,巴黎在“发件人”字段中。elementID是“ origin”。
关于为什么会发生这种情况的任何意见?
编辑:通过对此类错误的进一步研究,看来这通常与同一个原产地政策问题有关,但是我无法从扩展中弄清楚这种情况如何发生。我可以找到该元素,但是在运行键事件时,它始终会显示该错误。
编辑2:
我已经在多个网站上对此进行了测试,以试图弄清正在发生的事情,并且它在控制台上总是会产生一些有关jQuery库文件的错误。在其中一个网站上,它不是缩小版,并且能够看到错误是以下代码块:
eventHandle = elemData.handle;
if (!eventHandle) {
elemData.handle = eventHandle = function (e) {
return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? jQuery.event.dispatch.apply(eventHandle.elem, arguments) : undefined;
};
eventHandle.elem = elem;
}
关于如何阻止我从扩展程序发送的事件有任何想法吗?
更换
var e = document.createEvent('KeyboardEvent');
和
var doc = gBrowser.selectedBrowser.contentDocument;
var e = doc.createEvent('KeyboardEvent');
解决了。
感谢Dagger @ #extdev (irc.mozilla.org)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句