2

看起来 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?:-)

4

2 回答 2

2

我会称之为功能。它不应该让你覆盖一切。接下来你会问如何在 Linux 上覆盖 Ctrl-Q,这样它就不会关闭浏览器......

于 2009-12-30T00:41:39.103 回答
1

我没有方便的 Mac,但我希望使用 keydown 事件中的 preventDefault() (可能是 S 事件,如果一个被触发)来阻止它。

如果你去这里,勾选“防止默认”框并按命令-s,你会得到一个保存对话框吗?

http://cross-browser.com/x/examples/key_events.php

于 2010-01-04T13:47:08.543 回答