最初對做兼容性的認知只停留在UI層面,但其實UI層面都還好,因為畢竟你可以直接看得見現(xiàn)象,更為重要的是在JavaScript層面,因為這個部分涉及到功能性,前者最多是體驗性的問題。下面扯一下這幾天遇到的IE8相關的兼容性問題。
1.所有$.ajax失效
剛開始看到的現(xiàn)象是IE8/9頁面切到了留言頁面,沒有進入正常流程。打開fiddler都沒抓到請求,奇怪了,打出$.ajax error方法中的返回值。xhr.status的值都是0,原來請求沒有發(fā)出去。心想:怎么沒有發(fā)出去呢,難道是跨域問題,不對啊,服務端已經(jīng)允許跨域了。后來一查(IE8/9下的跨域資源請求),原來請求被IE8/9阻止了,所以服務端允許跨域了也沒有用。當時網(wǎng)上有兩種辦法,1個是設置瀏覽器,允許通過域訪問數(shù)據(jù)源。2個是加入一個js插件,也就是讓IE8/9/10走IE自己支持的XDomainRequest發(fā)送請求。第一個方法只能玩玩,不可能讓用戶去操作套路那么深的步驟。第二個方法github上有兩套js。
https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest
https://github.com/jaubourg/ajaxHooks/blob/master/src/xdr.js
引用后都不用改代碼,剛開始還有點小激動。
<!--[if (IE 8)|(IE 9)]><script src="Js/jQuery.XDOmainRequest.js"></script><![endif]-->
加上去一看,請求發(fā)過去了,界面進入了正常流程。but,又發(fā)現(xiàn)返回的值不對,說與服務端,服務端說你的值沒傳過來,怎么可能,代碼都沒動,原來這個XDomainRequest是參數(shù)走的header,先天性缺少contentType,沒有參數(shù)的請求返回是正確的,有參數(shù)的后臺就沒有讀到。又尋思著難道要后臺改代碼,支持一下這種方式?我遲疑了。然后就到群里和隊友們討論下。大家給出