同事被一個鬼怪問題困住: 新裝好Virtual Server 2005 R2 SP1,複製完VM並掛上,卻在用管理介面網頁界面啟動VM時出現Javascript錯誤:
'document.getElementById(...)' is null or not an object
而該錯誤導致VM無法開機! 換句話說,安裝VS2005 R2 SP1跟Copy超大vhd的功夫變成在做心酸的。

茶包射手出馬,心想既然是Javascript問題,應該不難追查。打開IE Developer Tools,馬上追到錯誤發生在以下程式片段:
javascript:document.getElementById('action').value='poweron';

使用Console下指令document.getElementById('action')傳回null,再仔細搜尋HTML原始碼:
<input type="hidden" name="action" value="none"><input type="hidden" name="vm">

BINGO!! <input>只給了name沒設id,但程式卻又試圖用getElementById取元素! 我想起一件事,getElementById在IE8模式下只會比對ID屬性且大小寫有別,在IE7模式下則同時比對ID及NAME屬性且不分大小寫。這是一段在IE8下會爆炸的程式碼,算是VS2005R2SP1不支援IE8的Bug... 知道原因就一切好辦,只需將IE8切到IE7相容模式,問題解決,收工回家!

最後順道提醒開發網頁的朋友:

請留意是否網頁裡有只給name沒設id的情形,或是getElementById(...)時沒分大小寫,這些設計在IE8下將會出錯。若不求長進但求省事,倒是可用document.all("...")取代document.getElementById("...")鋸箭;但強烈建議為元素補上id,並分清楚大小寫方為王道!! 既然要動手就該一次把事情做好,不要留下個document.all的尾巴,到時要搞跨瀏覽器又要再痛一次。


Comments

Be the first to post a comment

Post a comment