-
Notifications
You must be signed in to change notification settings - Fork 185
Open
Labels
Description
Hi All,
这个 issue 抛出一个关于事件的提案,我希望能够在 Web 中文兴趣组内先进行一些讨论,收集意见和建议,最终目标是能够贡献此标准。
需要注意的是这个文档目前还只是一个"提议",还不算是比较完整的提案。
提案期望解决 Web 标准下具有根据“特征判断”来获取当前宿主环境本身是否提供某个事件能力,以此来得知是否可以在当前宿主环境下使用某个具体的事件能力。
举个例子:
以 dblclick 事件为例,在移动端上,safari、firefox 等浏览器支持,但是 chrome、android WebView 不支持,这时如果我们没有“特征判断”则需要像下述那样编码。
if (/Chrome/.test(window.navigator.userAgent)) {
// 通过其他手段实现,比如判断 2 次点击
} else {
element.addEventListener('dblclick', (e)=>{
//...
});
}显然,通过“环境判断”我们可以去实现相关功能,但是当历史版本以及浏览器种类繁多带来了非常多的判断条件。
Web 标准中,所有的 element 都是继承自 eventTarget,开发者无论监听何种事件都应该正常监听。但是开发者本意是监听一个来自宿主环境的 dispatch 时,宿主环境本身没有相关功能,就会导致功能缺失,而开发者无法很好地在上层进行判断。
我们期望通过“特征判断”来判断是否当前宿主环境提供某个特定事件,以解决上述问题。
我暂时想了三种方案,希望抛出来大家讨论一下:
- 通过提供一个宿主环境的方法 navigator.queryEventTypeSupport(type) 以供开发者查询宿主环境是否支持该功能。
const isSupportDblclick = navigator.queryEventTypeSupport('dblclick');- 通过提供一个宿主环境的方法 Event 上提供一个静态方法 queryEventTypeSupport(type) 以供开发者查询宿主环境是否支持该功能。
const isSupportDblclick = Event.queryEventTypeSupport('dblclick');- 在 eventTarget 上提供到某个具体的 element 的事件查询能力。
const element = document.createElement('div');
const isSupportDblclick = element.queryEventTypeSupport('dblclick');我希望讨论的内容
- 提案的必要性以及推进的可行性
- 提案的描述
- 关于实现可行性
- 提案的流程
- 具体实现的方法:比如上述抛出的 navigator 扩展或者 Event 静态方法扩展
yanm1ng and TYRMars