我正在为我的网络应用程序使用prototype.js,并且所有内容都在 Chrome、Safari 和 Firefox 上运行。我现在正在研究 IE8 兼容性。
当我在 IE 中调试时,我注意到我之前在窗口上设置了观察者,例如 Javascript 事件,例如
Event.observe(window, eventType, function () {...});
(其中 eventType
可能是 "dom:loaded"
、 "keypress"
等),它在 Chrome/Safari/Firefox 中工作得很好。然而,在 IE 中,观察者永远不会触发。
至少在某些情况下,我可以通过将观察者放置在 window
以外的其他位置来使其在 IE 上工作。 ,例如document
(在 "dom:loaded"
的情况下)或 document.body
(在 "keypress"
的情况下)。然而,这都是反复试验的结果。
是否有一些更系统的方法来确定将这些观察者放置在哪里,以便结果跨浏览器兼容?
请您参考如下方法:
(这不是一个 super 全面的答案,但它似乎是根据经验得出的——所以希望这些经验法则对其他人有帮助。)
一般来说,在
文档
上注册事件,而不是窗口
。 Webkit 和 mozilla 浏览器似乎都对这两种浏览器都很满意,但 IE 不会响应窗口上注册的大多数事件,因此您需要使用document
来与 IE 配合使用异常(exception):
调整大小
,以及与加载、卸载和打开/关闭相关的事件都应该在窗口上设置。第一个异常(exception)的异常(exception):必须在 IE 中的
document
上设置dom:loaded
。另一个异常(exception):在启用“按输入查找”功能的 Mozilla 下检测击键时,请在
窗口
(而不是文档
)上设置按键事件观察器。如果您执行后者,则“按输入查找”似乎会阻止该事件。