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

我看到的現象是ASPX抓到的Request["p"]裡出現了%2f這類文字,而該URL是由一段Javascript產生的; 這段Javascript去抓某個<a href="javascript:...">的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下都不致出錯。


Comments

Be the first to post a comment

Post a comment