天天看點

IE11浏覽器緩存bug

項目在集中測試階段,客戶從各地過來,測出來很多“奇形怪狀”的bug。有些客戶帶着新買的筆記本Win10作業系統,沒自己裝浏覽器,整着IE11就上了。結果好好的功能沒有實作,其他浏覽器顯示木問題。

一點一點跟斷點,發現資料是存進去的,但是顯示的時候請求根本沒有進背景,是以懷疑走的緩存。打開控制台,發現果不其然。

怎麼每次強制請求背景呢,最傻傻的方法就是加個時間戳。

.factory('UserDeviceService', function ($resource) {
return $resource('/users/:dest', {}, {
            query: {method: 'GET', params: {dest: "getDevicesByUserID"}, isArray: true }
        });
 app.$scope.getUserDevices = function () {
        UserDeviceService.query({cacheKill: new Date().getTime()},function (data) {
            //logic
        });
    }
           

首先作為一個程式員,感覺很不優雅,其次,項目都做完了,改動太大,手動去改,傻傻的,萬能的Stack Overflow有人回答“I have solved this problem by adding No-Cache headers to the response on server side.”(在伺服器端加個No-Cache的header),這點還沒測,自己能搞定的事,盡量别麻煩别人,而且不清楚背景是不是也要幾個接口一個接口的改。我實作的方法是用每次強制請求背景,不去cache拿資料。

App.config([ '$httpProvider', function($httpProvider) {
    //initialize get if not there
    if (!$httpProvider.defaults.headers.get) {
    $httpProvider.defaults.headers.get = {};
    }
    //disable IE ajax request caching
    $httpProvider.defaults.headers.get['If-Modified-Since'] = '0';
    $httpProvider.defaults.cache=false;
} ]);
           

給兩個參考連結:

WIN10 Developer的Blog

國外大神的Blog,包括jQuery,kendo等緩存bug

繼續閱讀