IE6 IE7 不支持 JSON

最近發現ie六、7不支持json,解決方法:引入json2.js     <script type="text/javascript" src="json2.js"></script>

json2.js下載:http://pan.baidu.com/s/1tHyDJjavascript

 

如下摘自:SJ9012: IE6 IE7 IE8(Q) 不支持 JSON 對象  

標準參考

JSON 是一種數據交換格式,RFC 4627 對 JSON 進行了詳細描述。java

根據 ECMA-262(ECMAScript)第 5 版中描述,JSON 是一個包含了函數 parse 和 stringify 的簡單對象。 parse 函數用來解析一個 JSON 文本(一個 JSON 格式的字符串)到一個 ECMAScript 值(例如 JSON 對象被解析爲 ECMAScript 對象, JSON 數組被解析爲 ECMAScript 數組,其它類型以此類推);stringify 則相反,它是將一個 ECMAScript 值解析爲一個 JSON 格式的字符串, 好比將一個 ECMAScript 對象解析爲一個 JSON 對象的字符串。算法

關於 JSON 的詳細信息,請參考 RFC 4627 和 http://json.orgjson

關於 JSON 對象的更多信息,請參考 ECMA-262 5th Edition 中 15.12 The JSON Object。數組

問題描述

IE6 IE7 IE8(Q) 不支持 JSON 對象。瀏覽器

形成的影響

使用了 JSON 對象的腳本代碼在 IE6 IE7 IE8(Q) 中運行的時候可能會拋出異常,致使功能失效。安全

受影響的瀏覽器

IE6 IE7 IE8(Q)  

問題分析

JSON 對象是在 ECMAScript 第 5 版中實現的,此版於 2009 年 12 月發佈;IE6 IE7 與 IE8(Q) (IE8(Q) 至關於 IE 5.5) 發佈時間比較早,沒有在其 Javascript 引擎中實現該對象。cookie

分析如下代碼:函數

<script type="text/javascript">
  window.onload = function(){
    var info = document.getElementById("info");
    if(window.JSON){
      var jsonStr = '{"name": "w3help", "url": "www.w3help.org", "tech": ["js", "HTML", "CSS", 5, 4.01, 2.1],'
          + '"online": true, "category": {"RCA": "Root Cause Artical", "KB":"Knowledge Base"},'
          + '"version": 1}', p, w3help;

      w3help = JSON.parse(jsonStr);
      for(p in w3help)
        info.innerHTML += p + " : " + w3help[p] + "<br/>";
      info.innerHTML += JSON.stringify(w3help);
    } else
      info.innerHTML = "Not support JSON object.";
  }
</script>
<div id="info" style="width:350px;"></div>

以上代碼首先探測是否在 window 下存在 JSON 對象,而後簡單測試了 JSON 對象的 parse 和 stringify 函數並輸出(反)解析結果。執行代碼,各瀏覽器中表現以下:測試

IE8(S) Firefox Chrome Safari Opera IE6 IE7 IE8(Q)
result in other browsers result in IE6 IE7 and IE8(Q)

解決方案

可使用 window.eval() 或 new Function(){} 的方式解析 JSON 格式字符串。如:

<script type="text/javascript">
  window.onload = function(){
    var info = document.getElementById("info"),
      jsonStr = '{"name": "w3help", "url": "www.w3help.org", "tech": ["js", "HTML", "CSS", 5, 4.01, 2.1],'
          + '"online": true, "category": {"RCA": "Root Cause Artical", "KB":"Knowledge Base"},'
          + '"version": 1}', p, w3help;

    //使用兩種簡單的方式解析 JSON 格式字符串
    json1 = eval("(" + jsonStr + ")"),
    json2 = (new Function("return " + jsonStr))();

    for(p in json1)
      info.innerHTML += p + " : " + json1[p] + "<br/>";
    info.innerHTML += "-----------------------<br />";
    for(p in json2)
      info.innerHTML += p + " : " + json2[p] + "<br/>";
  }
</script>
<div id="info" style="width:350px;"></div>

各瀏覽器中表現以下:

全部瀏覽器 solution

可見,以上代碼能夠做爲 JSON.parse() 跨瀏覽器的簡單替換方案。一樣 JSON.stringify() 能夠經過判斷類型加算法實現,這裏再也不贅述。

須要注意的是,這種解析 JSON 格式字符串的簡單實現存在安全問題,被插入的惡意 JSON 字符串(好比獲取用戶的 cookie 信息)可能被解析並執行。 可使用一些通過驗證的安全成熟的的解決方案,例如 json2.js 中的 JSON.parse() 或 jQuery.parseJSON()。

 

 

其餘資料:

json2.js 使用詳細教程:http://blog.csdn.net/mine_1/article/details/6456792

相關文章
相關標籤/搜索