Opera与输入法(IME)的小故事

Firefox在输入法(IME)下的行为曾经让不少开发者烦恼,它和IE与Chrome的主要区别是,后两者在IME输入时都会触发keyup事件,而Firefox在完成时才会触发keyup事件。后来Firefox与IE、Chrome都实现了DOM Level 3里的Composition Event,有了类似compositionupdate的更新事件,于是也就没了支持上的问题(Mozilla也拒绝了来自开发者对keyup事件触发行为更改的请求,转为推荐使用Composition Event)。

眼见标准即将统一,Opera决定出来搅局。老版本和其他OS我没测试过不知道情况,但最新的Opera 11.62+Windows 7,配合几个主流IME输入都是彻底黑箱:不仅没有增加Composition Event的支持,连在输入完成时都没有keyup事件发出!更有趣的是,明明Opera Mobile一直能触发keyup事件

要我说,换成别的小众浏览器开发商也就罢了,偏偏Opera开发团队一堆人在W3c里当标准文档的编辑,这么做简直是公然卖萌!转念一想,我突然明白了如此多jQuery插件都故意绑定keydown的理由——大家都会keydown,这事件靠谱。

然而事情没完,Opera不仅使用197这个神奇的keycode(Windows下IME启动默认是229),而且在输入法启动时,连续输入只会触发一次keydown,除非你切换输入法。口说无凭,各位换几个浏览器去W3的测试页面和这个jsfiddle页面输入下中文/日文/英文就知道了。

解决方案?input事件,没错,这事件本身就叫input;IE和Chrome会在每次拼音更新时触发,而Firefox和Opera会在输入完成后触发该事件。它克服了keydown事件的触发问题。

(当然如果你不在乎效能,大可喊一句这都是时臣的错,然后用个setInterval报复社会。)

Author: 店长

The Master of BitInn

6 thoughts on “Opera与输入法(IME)的小故事”

Comments are closed.