firefox插件错误中的关键事件:访问属性'的权限被拒绝;键入'

Key event from firefox addon error : Permission denied to access property 'type'

本文关键字:键入 拒绝 权限 属性 错误 插件 firefox 事件 访问      更新时间:2023-09-26

我有一组要运行的关键事件,但在扩展中执行这些事件时遇到了一些问题。

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

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

如果我在firebug上运行这个,它就完全符合我的要求。

但当我从扩展中运行它时,控制台上出现一个错误,上面写着

访问属性"type"的权限被拒绝wich指向该网站的jQuery文件。

我不明白是什么触发了这个错误,因为它在Firebug中运行起来很顺利。

发生这种情况的一个例子是在www.kaya.com上,Paris在"From"字段。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');

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