看起来 Opera/Mac 不允许您在用户按下 ⌘S 时覆盖操作(当然,默认设置是保存页面)。我发现我的旧脚本在其中不起作用。它通过 Ajax 将表单内容保存到服务器。
这是一个 onkey* 处理程序:
key = ev.keyCode
if (!key) key = ev.charCode
if (ev.type == 'keypress' && 115 == key && ev.ctrlKey) return false
if (83 == key && ev.ctrlKey) {
if (ev.type != 'keypress') save_text ()
return false
}
Opera/Mac 的第一个奇怪之处在于它在 ⌘ 键上生成 ctrlKey 而不是实际的Ctrl
键。所以在 Safari 中,这个可以完美地用我的代替标准的 ^S 动作。但是在 Opera 中,它完全忽略了 ^S,因为 ctrlKey 是 ⌘ ,但是无论你做什么, ⌘S 都会带来标准的保存对话框。
当我按下 ⌘S 时,我试图实际监控 Opera 中的所有 key* 事件序列,它是使用 keyCode 17 的 keydown,然后是使用 keyCode 17 的 keypress,两者都发生在我按下 ⌘ 之后。按 S 后根本不会产生任何事件。
所以看起来我运气不好。任何人都知道如何强制 Opera 让我覆盖⌘S?:-)