我有一个Firefox扩展,可以修改用户正在查看的页面的内容。作为该过程的一部分,扩展需要触发扩展自身添加到页面源的自定义事件。我很难将参数传递给该自定义事件。我究竟做错了什么?
脚本块插入到head
页面的中:
document.addEventListener("show-my-overlay", EX_ShowOverlay, false, false, true);
function EX_ShowOverlay(e) {
alert('Parameter: ' + e.index);
// ...
}
扩展中的代码:
var event = content.document.createEvent("Events");
event.initEvent("show-my-overlay", true, true);
event['index'] = 123;
content.document.dispatchEvent(event);
事件已成功触发,但e.index
未定义。
我设法通过在页面上创建一个元素,然后让事件处理程序找到该元素并读取其属性来使其正常工作,但是感觉并不优雅。我想在没有元素的情况下做到这一点。
编辑:
我也尝试使用触发事件CustomEvent
,但是它在处理程序中引发了异常:
var event = new CustomEvent('show-my-overlay', { detail: { index: 123 } });
content.document.dispatchEvent(event);
function EX_ShowOverlay(e) {
alert('Parameter: ' + e.detail.index);
// ...
}
拒绝访问属性“详细信息”的权限
您不能跨安全边界访问“ expandos”(在本机原型对象上定义的其他属性)。在这种情况下,安全边界位于完全特权的chrome(附加)代码和非特权的网站代码之间。
因此,您需要使用“标准”内容传递数据。的CustomEvent
东西会做,但是你的代码是错误的。您必须initCustomEvent()
正确调用构造函数:
var event = new CustomEvent('show-my-overlay', { detail: { index: 123 } });
content.document.dispatchEvent(event);
另一种选择是在postMessage
API。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句