2

我有一组要运行的关键事件,但是从我的扩展程序中执行它们时遇到了一些麻烦。

目标是在触发自动完成列表的输入元素上触发这些事件,它将选择列表中的第一个:

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);

如果我在萤火虫上运行它,它正是我想要的。

但是当我从我的扩展程序运行它时,我在控制台上收到一个错误,上面写着

拒绝访问指向该网站的 jQuery 文件的属性“类型”的权限。

我不明白是什么触发了该错误,因为它在 Firebug 中没有任何麻烦。

发生这种情况的一个例子是 www.kayak.com 上的“发件人”字段中的 Paris。elementID 是“原点”。

关于为什么会发生这种情况的任何意见?


编辑:通过对此类错误的额外研究,这似乎通常与同源政策问题有关,但我无法从我的扩展中弄清楚这是如何发生的。我可以找到该元素,但是在运行关键事件时,它不断给出该错误。


编辑 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;
}

关于这如何妨碍我试图从我的扩展发送的事件的任何想法?

4

1 回答 1

3

更换

var e = document.createEvent('KeyboardEvent');

var doc = gBrowser.selectedBrowser.contentDocument;
var e = doc.createEvent('KeyboardEvent');

解决了。

感谢匕首@#extdev (irc.mozilla.org)

于 2013-07-27T17:21:03.310 回答