【茶包射手日記】再遇IE8內建JSON null問題

同事回報我的一個網頁會出現Javascript錯抓資料成"null"(不是null,而是四個字元的字串--"null”)的問題。幾經測試後發現,在其他同事及我的IE8、使用者的IE6/7測試都OK,唯獨同事的IE8會出問題。

深入追查後抓到問題根源,有段程式去用$("#X”).attr(“attr”)抓取<input id=”X” attr=”” />的屬性,經過JSON.stringify時,在同事的IE8上會傳回"null”,IE6/7因為未內建JSON,靠JSON2.js處理,會傳回"",而我的IE8也傳回""。比對了IE8版本,我的是8.0.7600.16385,同事的則是8.0.6001.18372,看來是IE8的版本差異導致行為不同。想起去年我抓過這個Bug,也通報給到Microsoft Connect確認,看來是在後來版本已修正了,同事IE8的版號較古老,或許是造成問題的原因。

關於此一Bug,普遍建議的解法是加上Replacer Function:

var replacer = function(k,v) { return (v == null || v==="") ? "" : v};
var jsonAsStr = JSON.stringify(value, replacer);

對程式做了修改,問題算是排除了。

我在噗浪上做了小民調,想確認會出問題的版號,目前蒐集到兩則回饋(感謝星寂、Vexed回報):

結果正常的版號: 8.0.7600.16385, 8.0.6001.18702IC, 9.0.7930.16406(IE9 Beta看起來是也OK)

傳回"null"的版號: 8.0.6001.18372, 8.0.6001.18702(Ken提供)

我做了一個測試網頁,使用IE8的朋友可以玩看看,若發現版號與測試結果與上述不同,可再留言跟大家分享。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>TEST IE8 JSON</title>
    <script type="text/javascript" 
     src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.js"></script>    
    <script type="text/javascript">
        $(function () {
            $("body").append("<input id='X' myAttr='' />");
            if (!JSON)
                alert("No Native JSON found!");
            else
                alert(JSON.stringify($("#X").attr("myAttr")));
        });
    </script>
</head>
<body>
</body>
</html>

另外,有一點注意事項 -- 要應用IE8的Native JSON,必須明確宣告<!DOCTYPE >,才適用IE8標準模式。(謝謝噗友ben補充,另外在點部落有篇IE8修練文章對IE8的三種模式有完整介紹,大家也可參考)。

歡迎推文分享:
Published 18 November 2010 05:19 AM 由 Jeffrey
Filed under: ,
Views: 8,795



意見

# Ken said on 18 November, 2010 01:25 AM

我的IE8會傳回"null"

版本是

8.0.6001.18702

# Ike said on 18 November, 2010 06:25 PM

我的 IE8 傳回 "",版本: 8.0.6001.18702

跟樓上一樣,結果不同

你的看法呢?

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

5 + 3 =

搜尋

Go

<November 2010>
SunMonTueWedThuFriSat
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

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

文章典藏
其他功能

這個部落格


Syndication