各位,你們在瀏覽網站的時候還能看到“模態”對話框嗎?(不是那種模擬的,是真實的用showModalDialog這個破玩意兒喚出來的)。你肯定說,現在那個網站還敢這么做呢,不是不想干了就是流氓網站吧,要不就是開發者是一群小白。OK,那么您在瀏覽網頁的時候用“后退”按鈕的次數多嗎?甚至於依賴后退按鈕的功能嗎?這是一個真實的事情,關於“模態”對話框和“后退”按鈕的事情。
對於showModalDialog這個API,你是不是已經忘記他很久了,或者你直接告訴我:“這個API我根本就沒有看過。“那我真是要恭喜你。不僅各個瀏覽器對其支持不一,行為也不太相同。就算是Modal的最徹底的Internet Explorer,也會有很多莫名其妙的問題。例如,如果你從一個modal Dialog中使用 window.open 打開一個新的窗體,恰巧你用的是IE6,或者使用了 –nomerge 參數啟動的高版本 IE,那么可能這個新的窗口和 modal Dialog 處於不同的 session,其 cookie 顯然也都是空的。如果你的這個鏈接需要 Authentication,那么這個新的窗口肯定通不過。QA會非常Kind的給你分配一個BUG編號;又例如,你可能發現使用不同權限的用戶登錄操作系統 Modal Dialog 的地址欄的顯示與否是不一樣的;又例如,你可能發現在 Modal Dialog下你沒有辦法用 Ctrl+C 復制文本!這些問題你可能會遇到,你可能不會遇到,如果你遇到了,相信你的心情一定不會太好。
對於用戶來說心情肯定更不好,(我仍舊以Internet Explorer為例,因為它才是真正的 modal,你說我是不是瘋了?對不起,這個系統需要承諾支持IE6、7、8、9、將來還有Firefox、Chrome、Safari,是不是很牛?),用戶已經習慣了用多個Tab頁面進行瀏覽,現在一個頁面彈出出了一個Modal Dialog,令所有的其他頁面全部都停止響應了,那心情怎叫一個爽字了得。那么這個網站是不是會遭到用戶的拋棄呢?不會的。不但不會,用戶還會屏氣凝神的在 Modal Dialog中把他/她該干的事情干完,小心翼翼的關掉它,然后再去瀏覽那些剛才被 Modal Dialog Disable掉的頁面。這是為什么呢?因為他在使用一個 E-Learning 系統。
好吧,說到 E-Learning 系統,最常想到的就是考試(對不起,還是叫測驗吧,因為基於 Web 的系統,根本放不了作弊)啊,問卷啊這些東西。這些東西有什么不一樣呢?他內部狀態特別豐富。拿考試來說吧,有一些考試只能夠單向作答,也就是你提交了一個答案那你想后悔可就來不及了;有一些考試是有總體時間限制的;有一些考試做了一道題還會給你彈出一個解釋層,告訴你你到底是為什么錯的;還有一些和心理測驗一樣,你第2道提選C,那么你就會跳到第4道題,第三道題是不許做的。凡此雲雲。你說,這種東西最怕什么呢?要我說,最怕的東西莫過於“刷新”和“后退”,實際上,刷新操作的處理還算比較容易,因為提交一道題的答案,這種東西是沒有狀態的刷就刷把,至於客戶端那些內部狀態的保持……總之你還能夠想些招數出來,那么再加上“后退”呢?我覺得除非你把所有的狀態全都移動到服務端去,否則你的客戶端腳本可能真是有點兒不好辦了(我們更倒霉,還遇上了腳本錯誤,這肯定是在設計的時候考慮不夠的原因)。
我們可以發揮一下想象力,考慮一下我們“專業”的瀏覽器使用習慣,然后說,沒關系,告訴用戶,別用“刷新”(F5)和后退(Alt+<-),我告訴你,用戶在稍微感受到一點延遲的時候就喜歡F5,在頁面加載緩慢的時候就希望(Alt + <-)。好吧,退一百步,你自覺到真的不會使用刷新或者后退。但是你在瀏覽器的文本框里正在發表長篇大論的時候,突然發現自己輸錯了一個字母,下意識的按了一下 Backspace,卻發現,“靠”頁面后退了。你遇到過嗎?我遇到過好多回了。
又有“專業”人員說,我還可以按F12,改改你的客戶端腳本,那么我可以想做多長時間就做多長時間(假設你的服務端沒有追蹤時間),想看答案就看答案(假設你的客戶端 load 了不該 load 的信息)。於是綜合考慮之下,一個無比英明的決定就做出了:用模態。但是在模態下,有一些客戶端行為又和非模態不太一致怎么辦,有一個無比英明的決定做出了,用 Flash或者Silverlight。於是一個在 Modal Dialog 中用 Flash或者 Silverlight展示的頁面就出現在了用戶的面前。
過了一些日子,手機和便攜客戶端(例如xxxPad,xxxface)開始風靡,Web應用追風搬的竄上了這些設備。這些設備更牛,不僅沒有什么Modal的東西,而且后退按鈕更人性,比如UCxxx,這瀏覽器的后退按鈕大部分情況直接走緩存(我很感謝這個功能,節省我很多流量),但是這讓E-Learning情何以堪啊。你說,一般人,拿着手機走在大馬路上,還做着題,現實嗎?我說你說的很對,但是現在我只做的起Web,我做不起App。那怎么辦呢?應該差異化,讓手機干手機上應該干的事情,那就是看;讓有鍵盤鼠標可以精確操控的干他們呢應該干的事情,那就是寫。很可惜,決定產品的人不是我。
各位,你們有沒有遇到過Modal和后退按鈕的煩惱呢?你是怎么處理的呢?