- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在开发 Firefox 扩展,但我一直看到以下警告:
Use of getPreventDefault() is deprecated. Use defaultPrevented instead.
但是,对于我正在尝试做的事情,defaultPrevented
似乎不起作用,而 getPreventDefault()
却起作用。对于简化的代码片段,这是我在 Browser
上下文中运行时放入我的 Firefox 浏览器暂存器中的内容:
window.addEventListener('fooEvent', function (event) {
console.log('fooEvent has fired');
event.preventDefault();
}, true, true);
然后在我的浏览器控制台(按下 Shift+Ctrl+k 时得到的那个)我运行以下代码:
e = document.createEvent('Event');
e.initEvent('fooEvent', true, true);
document.dispatchEvent(e);
console.log('after dispatch', e.defaultPrevented, e.getPreventDefault());
我可以在我的 Javascript 控制台中看到 fooEvent has fired
消息,所以我知道该事件已被捕获。但我看到消息 after dispatch false true
表明 defaultPrevented
仍然是 false 而 getPreventDefault()
正确返回 true。但是 Firefox 仍然显示弃用警告!
我想避免使用已弃用的 API 调用,因为我不希望 Firefox 升级破坏我的扩展。 (有一个 open ticket 用于删除已弃用的 API 调用,尽管它看起来可能需要一段时间才能完成。)我做错了什么?
最佳答案
我可以在 Firefox 30 和 Nightly 中重现这一点。
在处理来自特权代码的合成内容事件时,您在这里发现的似乎是一个真正的错误。
回答你的问题:你似乎没有做错任何事;浏览器是。暂时使用 getDefaultPrevented()
并且它仍然可用。您可以进行功能检测(并希望在删除 .getPreventDefault()
之前修复 .defaultPrevented
):
var dp = "getPreventDefault" in e ?
e.getPreventDefault() :
e.defaultPrevented;
作为发现此错误的人,请 file a bug并阻止它反对 https://bugzilla.mozilla.org/show_bug.cgi?id=691151
如果您在评论或其他内容中提供新的错误 URI,那就太好了。如果您不想自己归档,请说出来,我会为您归档。
编辑
另一种处理方法是使用 dispatchEvent()
的结果。显然 mozilla 的人也忘记破坏它了。
The return value of dispatchEvent indicates whether any of the listeners which handled the event called preventDefault. If preventDefault was called the value is false, else the value is true.
e = document.createEvent('Event');
e.initEvent('fooEvent', true, true);
if (document.dispatchEvent(e)) {
// Execute default action
}
关于javascript - 为什么 getPreventDefault() 起作用而 defaultPrevented 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24170274/
我想在 Firefox 中的加载页面上打印收据页 Firefox 显示以下错误.. 不推荐使用getPreventDefault()。请改用defaultPrevented。错误源行: src.get
以前我在代码中使用 jQuery 1.7.1。我收到上述错误。然后我直接从谷歌存储库使用了 jQuery 1.11.1 但我仍然收到此错误。我该如何解决这个问题? 由于这个错误,我的其他 jQue
我正在开发 Firefox 扩展,但我一直看到以下警告: Use of getPreventDefault() is deprecated. Use defaultPrevented instead.
我正在开发 MVC 应用程序,我有 jQuery 插件,计算页面的宽度和高度,我从 document.ready 函数调用它。我收到以下错误 ReferenceError: getPreventDef
我是一名优秀的程序员,十分优秀!