CustomEvent - 表示由应用程序为任何目的初始化的事件

CustomEvent 接口表示由应用程序为任何目的初始化的事件。

注意: 此特性在 Web Worker 中可用。

构造函数

CustomEvent()

创建一个 CustomEvent.

属性

CustomEvent.detail 只读

初始化事件时传递的任何数据。

该接口从其父类 Event 继承了属性

方法

CustomEvent.initCustomEvent()

初始化一个 CustomEvent 对象。如果事件已经被调度,则该方法不执行任何操作。

该接口从其父类 Event 继承了方法。

规范

规范 状态 备注
DOM
CustomEvent 的定义
现行的标准 初始定义。

桌面浏览器兼容性

特性 Chrome Edge Firefox Internet Explorer Opera Safari
基础支持 支持 支持 6 9 11 5.1
在 workers 中可用 支持 支持 48 支持 支持 支持
CustomEvent() 构造函数 15 支持 11 不支持 11.6 不支持1
detail 11 未知 11 不支持 11.6 不支持1
initCustomEvent

支持

592

支持 6 9 11 5.1

移动浏览器兼容性

特性 Android Chrome for Android Edge mobile Firefox for Android IE mobile Opera Android iOS Safari
基础支持 支持 支持 支持 支持 未知 支持 支持
在 workers 中可用 支持 支持 支持 48 未知 支持 支持
CustomEvent() 构造函数 支持 支持 支持 支持 未知 支持 不支持1
detail 支持 支持 未知 14 未知 支持 不支持1
initCustomEvent

支持

592

支持

592

支持 6 未知 支持 支持

1. 在 Nightly build 中可用 (535.2)

2. canBubblecancelabledetail 是可选的参数,默认值分别为 false, falsenull

从特权代码到非特权代码的触发

当从特权代码(即扩展)触发 CustomEvent 到非特权代码(即网页)时,应该考虑安全问题。 Firefox 和其他 Gecko 应用程序限制在一个上下文中创建的对象直接用于另一个上下文,这将自动防止安全漏洞,但这些限制也可能会阻止您的代码按预期运行。

在创建 CustomEvent 对象时,必须从同一窗口创建对象。 CustomEvent 的 detail 属性将受到相同的限制。在内容中可以无限制地读取字符串和数组值,但自定义对象则不行。使用自定义对象时,您需要使用 Components.utils.cloneInto() 定义可从内容脚本中读取的对象的属性。

// doc 是对内容 document 对象的引用
function dispatchCustomEvent(doc) {
  var eventDetail = Components.utils.cloneInto({foo: 'bar'}, doc.defaultView);
  var myEvent = doc.defaultView.CustomEvent("mytype", eventDetail);
  doc.dispatchEvent(myEvent);
}

但需要记住的是,公开函数将允许内容脚本使用 chrome 权限运行它,这可能会产生一个安全漏洞。

相关链接