2008年8月6日 星期三

身陷 JavaScript 的迷瘴

撰文者: PJ. Wan

由於我們公司的 spam mail filter system 在 firefox 使用, 才發現原來當初撰寫許多的語法都只適用在 IE中, 而我又偏偏愛用 Linux (連我公司家裏的電腦都只有Linux系統), 所以狠下心來研究如何將 裡面的 JavaScript 改寫為 firefox 適用. 以下是查看多個網站, 再加上自己實際上得測試, 獲得的一些心得.

document.all 網站上都會說這個語法在 firefox 不受支援, 但或許我用的是 firefox 3版, 我發現並非所有的 document.all 都不能執行, 有些還是需要保留, 像是:
document.all.showDataForm.submit();

當 然, 許多網站上也說明最好是用 document.getElementById 來取代 document.all; document.all 是微軟提供給程式設計者, 針對 IE 的一個好用的函式, 而 document.getElementById 則是符合 W3C 的規格, 這個函式可以看成 get-Element-By-Id , 也就是取得 ID 值; 修改的方式是, 比如: document.all.iPage.value , 對 document.all 來說, iPage 是一個 Name or Id ,iPage.value 就是 iPage 這個 Name or Id 的值.,如果要改為 getElementById , 則必須將 iPage 這個 Id Name 包在裡面, 形成這樣: document.getElementById("iPage").value , 以此類推.

另外, document.all.length 看網站上是說它在 firefox 不受支援, 就在查了許多的網站, 猶如在黑暗中看到一絲光線般的, 終於看到了解決方案 ; getElementsByTagName ; 另外, window.frames("framesname") 則必須改為 window.frames["framesname"] 才能在 firefox 使用, 好, 回到上述 document.all.length 解決方式, 先用 var 產生一個具有 getElementsByTagName('Tag-Name') 的變數, 由於我碰到的狀況是連同 window.frames[] 這個函式, 而我解決的方式是:
var UC = window.frames["FramesName"].document.getElementsByTagName('*');
爾後在程式中可以如下使用:
UC[i].id.indexOF(...)

這樣就可以了.
---------------------------------------------
關於 window.close();
---------------------------------------------

在 Mozilla 底下是正常的
不過如果這個動作必須在最上層的 window 發出
在底層的 frame 會沒有作用

試試 top.window.close();

沒有留言: