這陣子在寫我的第一個Silverlight專案,一個有成千上萬數字欄位的即時監控畫面。Silverlight DataGrid客製化的彈性不如想像來得好,例如動態設定列背景色、依數字正負顯示不同顏色、在列與列加入間隔等都得DIY(而且還挺麻煩的),加上各方書籍、網站文章對DataGrid的討論十分有限,常為了一個小功能耗掉半天一天。不過整體來說,Silverlight達成了HTML+AJAX很難呈現(或要耗費可觀的工夫)的效果,我覺得有其犀利之處,將來一些適合的情境下我會再選擇走Silverlight。

到了要上線的時刻,User提了個需求,由於欄位超多,希望能把IE的Menubar、Toolbar、Statusbar都隱藏,爭取最大顯示空間。本來,User自己就可以按F11切換全螢幕模式,但想當然爾,這種事程式應該自己打理好,怎麼可以勞煩偉大使用者每次動用尊貴手指去按鍵? 浪費時間不說,萬一手指吃蘿蔔乾,重創公司的生產力,誰要來擔這個責任? XD (謎之聲: 施主怨念怨很大,是否該去度個假?)

談到自動化開全螢幕,優先想到的是用window.open("...", "WinTitle", "taskbar=0,menubar=0,location=0,status=0")另開新視窗達成,但開新視窗後原視窗應關閉,得克服原視窗被程式關閉前的確認,而window.open受廣告網頁之累,也常會被一些外掛軟體莫名攔下。

Google一下,我找到一個過去沒玩過的解決方案 -- Microsoft Internet Explorer 中的 Kiosk 模式,使用iexplore -k httq://yourUrl,就可以在全螢幕下開啟網頁,整個桌面就只看得到網頁。這很適合用在博物館、醫院裡會看到的那種導覽機器上,如果只配上觸控螢幕及數字鍵盤,不讓User有機會按下Ctrl-Alt-Del、Alt-Tab,這不失為一個用網頁技術實做Kiosk的好方法。

看了一下,IE去除了上下左右的框框及選單工具列,果然當場多看到七八列資料。不過,有個小問題是,在Kiosk模式下叫不出選單、工具列,又沒有右上角的關視窗小X,初接觸的人肯定會找不到關IE的方法。所以我需要在網頁上加一個觸發window.close()的<input type="button">(或是提示使用者可以按Alt-F4結束)。本想聰明些,透過Javascript偵測在Kiosk模式下自動顯示關閉鈕,但發現IE並沒有現成的API可以察覺是否處於Kiosk模式。最後的解決方案是---如果要開Kiosk模式時,URL上加上?mode=kiosk,再由location.href.indexOf("kiosk") > -1判別,鋸箭解決!!


Comments

# by 神祕的藍

原來還有這樣的方式 之前還在教使用者去 IE =>工具=>網際網路=>安全性 去裡面讓他可以全螢幕 但是這樣不能解決window.open被擋下來的問題 用這樣的方式 果然方便快速多了^^ ps. htt "q"://yourUrl 應該是 Htt "p" ://youUrl :P

# by Jeffrey

to 神祕的藍, httq 是故意打成q的,不然Blog平台會雞婆地自動加上<a>連結,讓不明究理的訪客在網海裡尋找youUrl這台主機。沒錯,我又用了鋸箭法... XD

# by 坎尼

window.open 可以在 features 裡面設定 fullscreen=yes (或是 fullscreen=1) 一樣可以達到全螢幕的效果 參考網址 http://www.w3schools.com/htmldom/met_win_open.asp 不過要先解決 popup blocker 和 window.close 的問題就是....

# by 坎尼

在window.open 在 features 裡設定 fullscreen=yes 一樣可以達到全螢幕的效果 (剛剛試了一下 其實和 Kiosk 模式好像是一樣???) 但是要先解決 popup blocker 的問題就是..... 參考網址 http://www.w3schools.com/htmldom/met_win_open.asp

# by 坎尼

剛剛以為意見發送失敗又多打一次 囧興 不好意思~ 多佔了一次版面 (這篇也是 XDDDD

# by 神祕的藍

to 坎尼: fullscreen確實可以用全畫面 不過不知道 你試過幾個版本的瀏覽器? 像Ie7之後 的全畫面還是會有一個視窗在最外圍(就是會有_囗X) 我後來查詢的結果是 原來為了惡意的廣告商 使用 所以ie 的安全性就新的限制 全畫面時 還是留著最外圍視窗 除非是手動把安全性取消 也就是我上篇提的方式 不過用kiosk 確可以直接全畫面 非常的方便 XD

# by kiru

請問有什麼方式可以用網址執行 iexplore -k httq://yourUrl ? 因為我想大部分的人都不可能上一個網站還刻意建立捷徑吧 很多人不會建捷徑也不想這樣做吧

# by kiru

請問有什麼方式可以用網址執行 iexplore -k httq://yourUrl ? 因為我想大部分的人都不可能上一個網站還刻意建立捷徑吧 很多人不會建捷徑也不想這樣做吧

# by Jeffrey

to kiru, 你是指在網頁上有個超連結,點下去用Kiosk模式執行嗎? 依我的理解,Kiosk模式主要用在預先設定好用途僅供劉覽的機器,而由網頁連結直接進入Kiosk模式會衍生偽造OS操作環境的風險,我猜想應該沒有更簡便的啟動方式。

# by Vito

版大你好~因為看到window.open()所以順便問個額外的問題:P 我的web畫面切成左右兩大塊,左邊百tree node右邊顯示data! 我主要是用window.open()來取得新的資料顯示在左邊的頁面,可是我遇到一個問題~就是我在IE 7/8都要點兩下以上才會取得做新資料(FireFox卻又正常),想請問板大有沒有什麼意見可以解決此種問題? 感恩~^^

# by Jeffrey

to Vito, 切左右兩大塊是使用FrameSet? 看有沒有辦法提供可以讓大家親自測試的示範網頁,大家比較容易幫忙。

# by vito

感謝阪大的回覆! 首先,先回答板大的問題: 我是用FrameSet做頁面的切割配置. 近幾日我已經解決此問題了~我把"window.open(URL,XXX)"改成"window.parent.XXX.location.href = URL;"即可! 但是我還不是很確定為啥用"window.open()"在IE上會不正常的root cause. 不知板大有沒有高見^^

Post a comment