gpt4 book ai didi

javascript - 为什么 getPreventDefault() 起作用而 defaultPrevented 不起作用?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:24:24 28 4
gpt4 key购买 nike

我正在开发 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.

from: DOM-Level-2-Events

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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com