Re: ime-mode 的行為

我用風之石的 jslab 做了關於 ime-mode 一系列的實驗[1]。

[1] http://www.jslab.org.cn/?tag=imeMode&page=9

(12/02/15 12:26), Kang-Hao (Kenny) Lu wrote:
> 1. 適用範圍
> 
> 規範裡的表格中,提到:
> 
>   # 適用於:     文字欄位
> 
> 這是真的嗎?在一般元素在有 @contenteditable 的情況下這個屬性難道不能用
> 嗎?另外,文字欄位包不包括密碼欄位?

結果是 IE 對於有 @contenteditable 的元素有用,FF 沒有。就一致性而言,我
想規範應該照 IE 的處理方式進行。另外,在 IE/Windows 下 <button> <span
tabindex="1"> <input type="checkbox"> 等等種種特殊情形下,ime-mode 沒有
效果,而是怎麼樣都不能打開 IME,在 FF/MacOSX 的情形下,ime-mode 沒有效
果,而是怎麼樣 IME 可以打開。

我會建議規範改成

  | 適用於:     文字欄位及有 @contenteditable 的元素,不包括密碼欄位。

另外,規範還應該寫清楚

  | 對於不適用的元素,使用者代理應該根據系統常規決定輸入法的狀態。

(不過這裡比較奇怪的是,在 Windows 下,在 IE 以外的應用程式裡,就算焦距
不在文字欄位輸入法還是可以變更。有沒有人知道為什麼會有這種 IE 跟其他應用
程式不一致的情形?MacOSX 則是包括瀏覽器的所有應用程式都是預設可以切換輸
入法。)

> 2. auto 跟 normal 的差異
> 
> 現在的描述是
> 
>   # auto
>   # 不更改現在輸入法的狀態。預設值。
>   # normal
>   # 輸入法狀態應該為正常 ― 此值可以在使用者樣式表裡面使用,以覆蓋頁面設定。
> 
> 到底什麼是「正常」?我看了 MDN 裡的解釋(竟然還會發生 MDN 裡的資訊比規範
> 還多的情形,真可悲)後面那個 input[type=password] { ime-mode: auto
> !important; } 的例子,好像是說 auto 的話就是在密碼欄位不能用輸入法,在其
> 他地方可以?所以 normal 指的是在哪裡都可以正常的用輸入法的意思嗎?有沒有
> 人可以證實一下?

測試結果:果然如此。

> 在看 MDN 這個解釋之前,我一直以為 auto 才是在哪裡都可以正常的用輸入法。
> MDN 說 IE 不支援 normal 而且不支援在密碼欄設置這個屬性,所以我猜它是用這
> 個解釋,再配上 UA 樣式 input[type=password] { ime-mode: disabled
> !important; } (類似 FF 的 noscript: display:none; !important),這樣應
> 該就不需要 normal 這個值。我個人覺得少一個沒用的屬性質也是少一個好...
> 
> 總之我不知道 normal 這個值到底跟 auto 有什麼不同....

所以 'normal' 這個值看起來唯一的用處就是用 input[type=password] {
ime-mode: normal; } 來讓密碼欄可以打中文,而這個功能本身也沒有用處,也就
是,個人感覺 'normal' 真沒什麼用處。如果「適用於」真的不含密法欄了,那我
建議拿掉這個值(或是 'auto' 二選一)。剩下的那個是真正的「不更改現在輸入
法的狀態。」

還是有人知道 normal 到底還有哪裡有用的?

> 3. 動態調整
> 
> 假如說我現在的焦距在一個文字欄未上,輸入法未開。這時候假如有一個腳本設置
> 了 ime-mode: active,這時候輸入法會打開嗎?隨便打點東西之後(但是不把焦
> 距移到別的地方),輸入法會打開嗎?(這可以用 setTimeout 測)

結論是不會。另外假如輸入法為啟動的狀況下,腳本把 'ime-mode' 設置成
'dissabled',輸入法還是還是可以啟動、關閉。只有在元素重新得到焦距的時
候,才會變成不能打開輸入法的狀態。所以這裡

  # CSS 屬性 ‘ime-mode’ 可以控制文字欄位輸入法的狀態。

要寫清楚

  | CSS 屬性 ‘ime-mode’ 可以控制元素得到焦距的時候輸入法狀態是否改變。
  | 在有焦距的元素沒改變的情況下,使用者代理必不可改變輸入法的狀態。


此致

Kenny

Received on Thursday, 16 February 2012 16:47:18 UTC