搜尋
首頁後端開發php教程ie與火狐中常見的兼容問題_PHP教程

ie與火狐中常見的兼容問題_PHP教程

Jul 22, 2016 am 09:02 AM
程式碼相容存在常見火狐問題

  1. document.form.item 問題

  (1)現有問題:

  現有程式碼中存在許多 document.formName.item("itemName") 這樣的語句,不能在Firefox(火狐)下運作

  (2)解決方法:

  改用 document.formName.elements["elementName"]

  2. 集合類別物件問題

  (1)現有問題:

  現有程式碼中許多集合類別物件取用時使用 (),IE 能接受,Firefox(火狐)不能。

  (2)解決方法:

  改用 [] 作為下標運算。如:

  document.forms("formName") 改為 document.forms["formName"]。

  又如:

  document.getElementsByName("inputName")(1) 改為document.getElementsByName("inputName")[1]

  3. window.event

  (1)現有問題:

  使用 window.event 無法在火狐瀏覽器上執行

  (2)解決方法:

  火狐 的 event 只能在事件發生的現場使用,此問題暫無法解決。可以這樣變通:

  原程式碼(可在IE中運作):

  

...
 

  新程式碼(可在IE和火狐中運作):

  
...
 

  此外,如果新程式碼中第一行不改,與老程式碼一樣的話(即 gotoSubmit 呼叫沒有給參數),則仍然只能在IE中運行,但不會出錯。所以,這種方案 tpl 部分仍與舊程式碼相容。

  4. HTML 物件的 id 作為物件名稱的問題

  (1)現有問題

  在 IE 中,HTML 物件的 ID 可以作為 document 的下屬物件變數名稱直接使用。在火狐中不能。

  (2)解法

  用 getElementById("idName") 取代 idName 作為物件變數使用。

  5. 用idName字串取得物件的問題

  (1)現有問題

  在IE中,利用 eval(idName) 可以取得 id 為 idName 的 HTML 對象,在火狐中不能。

  (2)解法

  用 getElementById(idName) 取代 eval(idName)。

  6. 變數名稱與某 HTML 物件 id 相同的問題

  (1)現有問題

  在火狐中,因為物件 id 不作為 HTML 物件的名稱,所以可以使用與 HTML 物件 id 相同的變數名,IE中能。

  (2)解法

  在宣告變數時,一律加上 var ,以避免歧義,這樣在 IE 中亦可正常運作。

此外,最好不要取與 HTML 物件 id 相同的變數名,以減少錯誤。

 

7. event.x 與 event.y 問題

(1)現有問題

在IE 中,event 物件有 x, y 屬性,火狐中沒有。

(2)解決方法

在火狐中,與event.x 等效的是 event.pageX。但event.pageX IE中沒有。故採用 event.clientX 代替 event.x。在IE 中也有這個變數。 event.clientX 與 event.pageX 有微妙的差別(當整個頁面有捲軸的時候),不過大多時候是等效的。

如果要完全一樣,可以稍微麻煩些: mX = event.x ? event.x : event.pageX; 然後用 mX 取代 event.x

(3)其它

event.layerX 在IE與火狐中都有,具體意義有無差別尚未試驗。

8. 關於frame

(1)現有問題

在 IE中 可以用window.testFrame取得該frame,火狐中不行

(2)解決方法

在frame的使用方面火狐和ie的最主要的區別是:

如果在frame標籤中寫了以下屬性:

那麼ie可以透過id或name存取這個frame對應的window物件而火狐只可以透過name來存取這個frame對應的window物件例如如果上述frame標籤寫在最上層的window裡面的htm裡面,那麼可以這樣訪問ie:window.top.frameId或window.top.frameName來存取這個window物件

火狐:只能這樣window.top.frameName來存取這個window物件

另外,在火狐和ie中都可以使用window.top.document.getElementById("frameId")來存取frame標籤並且可以透過window.top.document.getElementById("testFrame").src = 'xx. htm'來切換frame的內容也都可以透過window.top.frameName.location ='xx.htm'來切換frame的內容關於frame和window的描述可以參見bbs的'window與frame'文章以及/test/js /test_frame/目錄下面的測試

9. 在火狐中,自己定義的屬性必須getAttribute()取得

10.在火狐中沒有 parentElement parement.children 而用

parentNode parentNode.childNodes childNodes的下標的意思在IE和火狐中不同,火狐使用DOM規範,childNodes中會插入空白文字節點。

一般可以透過node.getElementsByTagName()來迴避這個問題。

當html中節點缺失時,IE和火狐對parentNode的解釋不同,例如






火狐中input.parentNode的值為form, 而IE中input.parentNode的值為空節點

火狐中節點沒有removeNode方法,必須使用以下方法 node.parentNode.removeChild(node)

11.const 問題

(1)現有問題:

在 IE 中不能使用 const 關鍵字。如 const constVar = 32; 在IE中這是語法錯誤。

(2)解決方法:

不使用 const ,以 var 代替。

12. body 物件

火狐的body在body標籤沒有被瀏覽器完全讀入之前就存在,而IE則必須在body完全被讀入之後才存在

13. url encoding

在js中如果書寫url就直接寫&不要寫&例如var url = 'xx.jsp?objectName=xx&objectEvent=xxx'; frm.action = url那麼很有可能url不會被正常顯示以至於參數沒有正確的傳到伺服器一般會伺服器報錯參數沒有找到當然如果是在tpl中例外,因為tpl中符合xml規範,要求&書寫為& 一般火狐無法辨識js中的&

14. nodeName 和 tagName 問題

(1)現有問題:

在火狐中,所有節點都有 nodeName 值,但 textNode 沒有 tagName 值。在 IE 中,nodeName 的使用好像 有問題(具體情況沒有測試,但我的IE已經死了好幾次)。

(2)解決方法:

使用 tagName,但應偵測其是否為空。

15. 元素屬性

IE下 input.type屬性為唯讀,但火狐下方可以修改

16. document.getElementsByName() 和 document.all[name] 的問題

(1)現有問題:

在 IE 中,getElementsByName()、document.all[name] 都無法用來取得 div 元素(是否還有它無法取的元素還不知道)。

17.最簡單的滑鼠移過手變型的css要改了

cursor:pointer;/*ff不支援cursor:hand*/ dw8下面自動出來的也沒有hand這個屬性了,標準的是pointer

18.ff不支援濾鏡 最常見的半透明不支援。

filter: Alpha(Opacity=50); /* for IE */
opacity: .5;/* for Firefox */

style="-moz-opacity:0.5; filter:alpha(opacity=50);cursor:hand;" onmouseover="this.style.MozOpacity=1;
this.filters.alpha.opacity=100" onmouseout="this.style.MozOpacity=0.5;
this.filters.alpha.opacity=50"

19.ff不支援expression 例如去掉連結的邊框要分別寫不同的css

a,area { blr:expression(this.onFocus=this.blur()) } /* for IE */
:focus { outline: none; } /* for Firefox */

20.ff不支援div捲軸的顏色設置,目前還沒有找到替換的 好方法。

.contendiv {
position: absolute; left: 0px; top: 10px; width: 580px;height: 135px;
line-height:120%;text-align:left; font-family:"宋體";word-break : break-all; color:#6D6E71;
OVERFLOW-Y:auto;OVERFLOW-X:no;
SCROLLBAR-ARROW-COLOR: red; SCROLLBAR-TRACK-COLOR: F6F6F6;SCROLLBAR-FACE-COLOR:#F6F6F6;SCROLLBAR-SHADOW-COLOR:#F6F6F6;
SCROLLBAR-DARKSHADOW-COLOR:#F6F6F6;SCROLLBAR-3DLIGHT-COLOR:#F6F6F6;SCROLLBAR-HIGHLIGHT-COLOR:#F6F6F6;
}
這個在ff裡面完全沒有效果了。

21.ie下方顯示在文字下方橫線的

border-width: 0px 0px 1px 0px;在ff裡面跑到文字上面去了。 (查了手冊還是沒有找到解決的辦法感覺莫名奇妙~~ 原來是ff的容錯能力太差了,是下面的width: 186px;height: 0px;寬高引起的,其實a:haver已經繼承了上級的屬性了,只要定義不同的樣式就可以了,看來ff有助於製作標準化,簡潔化的網頁啊,對css的理解也更深刻,對提供css來說是個很好的幫助)

.onelinksdiv a:hover {
display: block;border-style: solid;color: #ff0000;border-width: 0px 0px 1px 0px;
/*
display: block;border-style: solid; border-width: 0px 0px 1px 0px; width: 186px;height: 0px; color: #ff0000; font-size: 14px;text-align: right; */
}

//下面的寫法在ie下面正常,但在ff下是錯誤的

.onelinksdiv a:hover {

display: block;border: #ff0000 solid; border-width: 0px 0px 1px 0px;
width: 186px;height: 0px; color: #ff0000; font-size: 14px;text-align: right;
}

相關參考資料:

border-width:border-top-width border-right-width border-bottom-width border-left-width; p#fourborders
{
border-width:thick medium thin 12px;
}

如果定義四個值,那麼這四個值就分別是上,右,下,左邊框的寬度值(從上邊框開始,以逆時針的順序遍歷).

等價於下面的定義

p#fourborders

{
border-top-width:thick;
border-right-width:medium;
border-bottom-width:thin;
border-left-width:12px;
}

22.ff不支援

scroll屬性

必須定義overflow:hidden;而且要在html標籤下,不能在 body下

html{
overflow:hidden;
}

23.ff不支援資料島綁定

在ie下可以載入進數據,但到了火狐就載入不進數據了,開始以為可能是因為內容行文字太多導致不能斷行不能加載,但刪除只剩下幾個字以後一樣不行。

24.style="word-break:break-all"

在網頁中的單元格里的內容超出一行時,在ie瀏覽器裡定義的換行樣式能夠正常使用,但在firefox裡卻不能被支持了.style="word-break:break-all"是MS擴充的IE專有屬性,並未成為W3C標準,因而Firefox 還不能支援它。不過MS已經將其提交到了W3C,而在W3C的CSS3的候選方案中也能看到它。希望這個屬性在被W3C最終定案的為CSS3標準 後,Firefox可以支援吧。這之前,可以試試
style="table-layout:fixed;word-wrap: break-word" (當它是英文的時候就不能正常換行了)

25.目前FF2.0為止都不支援IE的name錨點

像這種寫法都是不支持的:go back
原來根據W3C的語法,標籤總是會尋找href位址並跳轉過去,現在onclick事件與###這個位址又有衝突。

為了讓Firefox與IE部分元素屬性相容,那個費勁,我無意中發現 Firefox對空格敏感:

//有空格,錨點作用
//無空格,錨點無法運作
錨點的寫法又十分講究,例如
,Firefox不支援錨點,得加上id=#1
靜態同頁引用時必須這樣寫:
就不行****態頁面要用JS

後遺症來了,考慮到滑鼠樣式和瀏覽器相容又開始折騰:

//不相容
//不相容
//沒有{...},屬於腳本的非法書寫
//沒照顧到自訂系統滑鼠樣式的使用者
我以為火狐瀏覽器使用的人很多,但從網站的統計分析來看火狐只有可憐的3.18%,但兼容他的標準確花費不少精力!不過標準化有利於以後的維護和擴展,有利於技術的持續提示。
-->

問題十四:OVERFLOW-Y:auto;OVERFLOW-X:hidden;在IE裡面可以用no表示隱藏,但在FireFox(火狐)裡面必須用hidden

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/371859.htmlTechArticle1. document.form.item 問題(1) 現有問題:現有程式碼中存在許多document.formName .item(itemName) 這樣的語句,不能在Firefox(火狐)下運作(2)解決方法: 改...
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
PHP的當前狀態:查看網絡開發趨勢PHP的當前狀態:查看網絡開發趨勢Apr 13, 2025 am 12:20 AM

PHP在現代Web開發中仍然重要,尤其在內容管理和電子商務平台。 1)PHP擁有豐富的生態系統和強大框架支持,如Laravel和Symfony。 2)性能優化可通過OPcache和Nginx實現。 3)PHP8.0引入JIT編譯器,提升性能。 4)雲原生應用通過Docker和Kubernetes部署,提高靈活性和可擴展性。

PHP與其他語言:比較PHP與其他語言:比較Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP與Python:核心功能PHP與Python:核心功能Apr 13, 2025 am 12:16 AM

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

PHP:網絡開發的關鍵語言PHP:網絡開發的關鍵語言Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP:許多網站的基礎PHP:許多網站的基礎Apr 13, 2025 am 12:07 AM

PHP成為許多網站首選技術棧的原因包括其易用性、強大社區支持和廣泛應用。 1)易於學習和使用,適合初學者。 2)擁有龐大的開發者社區,資源豐富。 3)廣泛應用於WordPress、Drupal等平台。 4)與Web服務器緊密集成,簡化開發部署。

超越炒作:評估當今PHP的角色超越炒作:評估當今PHP的角色Apr 12, 2025 am 12:17 AM

PHP在現代編程中仍然是一個強大且廣泛使用的工具,尤其在web開發領域。 1)PHP易用且與數據庫集成無縫,是許多開發者的首選。 2)它支持動態內容生成和麵向對象編程,適合快速創建和維護網站。 3)PHP的性能可以通過緩存和優化數據庫查詢來提升,其廣泛的社區和豐富生態系統使其在當今技術棧中仍具重要地位。

PHP中的弱參考是什麼?什麼時候有用?PHP中的弱參考是什麼?什麼時候有用?Apr 12, 2025 am 12:13 AM

在PHP中,弱引用是通過WeakReference類實現的,不會阻止垃圾回收器回收對象。弱引用適用於緩存系統和事件監聽器等場景,需注意其不能保證對象存活,且垃圾回收可能延遲。

解釋PHP中的__ Invoke Magic方法。解釋PHP中的__ Invoke Magic方法。Apr 12, 2025 am 12:07 AM

\_\_invoke方法允許對象像函數一樣被調用。 1.定義\_\_invoke方法使對象可被調用。 2.使用$obj(...)語法時,PHP會執行\_\_invoke方法。 3.適用於日誌記錄和計算器等場景,提高代碼靈活性和可讀性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。