【发布时间】:2014-06-11 18:42:31
【问题描述】:
我正在开发 Firefox 扩展程序,但我不断看到以下警告:
不推荐使用 getPreventDefault()。请改用 defaultPrevented。
但是,对于我正在尝试做的事情,defaultPrevented 似乎不起作用,而 getPreventDefault() 起作用。对于简化的代码 sn-p,这是我在 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 仍然为假,而getPreventDefault() 正确返回真。但 Firefox 仍然显示弃用警告!
我想避免使用已弃用的 API 调用,因为我不希望 Firefox 升级破坏我的扩展。 (有一个 open ticket 表示要删除已弃用的 API 调用,尽管看起来可能需要一段时间才能完成。)我做错了什么?
【问题讨论】:
-
@Nile:我在 Firefox 29 中看到了这种行为,该错误已被修复。我还刚刚通过在该票证中运行 sn-p 来确认本地修复,以确认警报消息中的
defaultPrevented是true。 -
@EliCourtwright:不,那个错误报告说他们没有在 FF29 中修复它?
-
@Bergi:该修复已向后移植到 Firefox 29 (
status-firefox29: verified)。在评论 #16 中降落在树枝上。 -
@Bergi nah,已验证的意思是“已验证已修复”。已确认的错误是“新的”而不是“未确认的”,状态通常是“受影响的”。
标签: javascript firefox events firefox-addon dom-events