KB-IE6/IE7對Attribute中Escape字元的處理區別

有個網頁用IE6檢視OK,用IE7卻會有問題,害我抓問題抓到滿身大汗!

我看到的現象是ASPX抓到的Request["p"]裡出現了%2f這類文字,而該URL是由一段Javascript產生的; 這段Javascript去抓某個<a href="BLOCKED SCRIPT...">的href屬性當來源,並做了escape();而這個href屬性是C#在後端計算出來的Base64編碼,且經UrlEncode處理... (看到這裡,大家頭都昏了吧?)

一路追追,總算找到問題的源頭。用以下的例子,可以驗證在IE6跟IE7中會得到不同的結果:

<html><body>
<a href="javascript:boo('%2f');void(0);" id="lnk">LINK</a>
<script type="text/javascript">
document.write(document.getElementById("lnk").href);
</script>
</body></html>

在IE6裡會看到boo('/'),而在IE7裡則會看到boo('%2f')!

換句話說,IE6在取得href時,若發現其中有escape過的內容,會將其unescape還原回原文字;而IE7則是忠實將結果傳回。

這個行為上差別,讓原本在IE6跑得好好的網頁,在IE7裡發生重覆多escape一次的狀況,產生了錯誤。

最後,我解決這個問題的鋸箭法是先檢查抓到的href值中有沒有出現%字元,如果有代表是IE7,則不再做escape。如此可包容二者行為的差異,在IE6/IE7下都不致出錯。

歡迎推文分享:
Published 11 April 2008 02:44 PM 由 Jeffrey
Filed under: , ,
Views: 9,974



意見

沒有意見

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<April 2008>
SunMonTueWedThuFriSat
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication