「模態」對話方塊和「後退」按鈕

2022-02-12 07:44:17 字數 1981 閱讀 3510

各位,你們在瀏覽**的時候還能看到「模態」對話方塊嗎?(不是那種模擬的,是真實的用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展示的頁面就出現在了使用者的面前。

各位,你們有沒有遇到過modal和後退按鈕的煩惱呢?你是怎麼處理的呢?

模態對話方塊和非模態對話方塊

模態對話方塊和非模態對話方塊的區別 在這裡我就說的比較通俗易懂了,就是當你開啟乙個模態對話方塊時,你的焦點不能轉移到程式的其他視窗上,也就是你只能先響應模態對話方塊,才能進行成下面的操作。而非模態對話方塊則相反,你可以不用管它,照常能夠將其他視窗啟用。建立模態對話方塊,主要是應用對話方塊的domod...

模態對話方塊和非模態對話方塊

模態對話方塊 關閉才能返回,非模態 不關閉就能返回 在資源裡新建立二個對話方塊 為新的對話方塊建立乙個類 在最原始的對話方塊函式的標頭檔案將上述兩個新新增的標頭檔案加進去,對模態按鈕進行程式設計 void cdemo11dlg onbnclickedbutton1 對非模態按鈕進行程式設計 void...

模態對話方塊和非模態對話方塊

模態對話方塊 modal dialogue box 是指在使用者想要對對話方塊以外的應用程式進行操作時,必須首先對該對話方塊進行響應。如單擊 確定 或者 取消 按鈕等將該對話方塊關閉,它和非模態對話方塊都是永遠置頂的,它們的區別在於當對話方塊開啟時,是否允許使用者進行其他物件的操作。開啟模態對話方塊...