IE有個討人厭的行為。

當網頁程式以JSON格式傳回結果(JSON字串,且Content-Type設為application/json),在IE需下載另存檔案才能檢視,不像Chrome或Firefox可直接看結果。當需要反覆測試,"重新整理網頁->選取位置另存檔案->開檔看結果"的迴圈容易誘發焦慮、煩躁、爆怒等症狀,而一般患者多會啟動生物本能,默默關上IE改開Chrome尋求解脫...

例如,以下MVC Controller的GetJson()會以JSON格式傳回字串:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
 
namespace MyWeb.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
 
        public ActionResult GetJson()
        {
            return Json("This is a test", JsonRequestBehavior.AllowGet);
        }
    }
}

使用IE測試,會彈出下載存檔提示:

手邊的專案需用IE測試,又不想為了測API切換不同瀏覽器,爬文求解,在stackoverflow找到很棒的解法。其原理是修改Registry,將application/json、text/json兩種Content-Type開啟設定調成與GIF/PNG/HTML一致,改為直接用瀏覽器檢視。

將以下內容存檔為ie-json-fix.reg,在Windows中點擊執行安裝即可完成Registry修改。

Windows Registry Editor Version 5.00
;
; Tell IE to open JSON documents in the browser.  
; 25336920-03F9-11cf-8FD0-00AA00686F13 is the CLSID for the "Browse in place" .
;  
 
[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00
 
[HKEY_CLASSES_ROOT\MIME\Database\Content Type\text/json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00

修改後,IE就能會Chrome一樣直接顯示JSON內容囉! It Rocks!


Comments

# by samtsai

改成 return Json("This is a test", "text/html", JsonRequestBehavior.AllowGet); 應該也可以吧

# by Jeffrey

to samtsai,改為"text/html"確實可以改變IE的行為,但不符JSON傳輸的規範,對其他識別MIME Type進行處理的AJAX應用可能造成困擾。

Post a comment