emu in blogjava

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            171 隨筆 :: 103 文章 :: 1052 評論 :: 2 Trackbacks
          開放ajax應用的時候為了避免瀏覽器緩存,我常建議在用XHR發起請求的時候加一個
          xmlhttp.setRequestHeader("If-Modified-Since","0");

          有的時候我們懷疑瀏覽器緩存了錯誤的腳本,也會這樣用xhr去沖掉IE原有的cache。不過這個方法在非IE瀏覽器下不管用,似乎是因為由于header有不同,非IE瀏覽器認為這些是不同的請求,cache在不同的地方,或者是放棄對這個與眾不同的請求的cache了。

          嘗試了一下一些能起類似作用的不同的header,發現firefox下,似乎cache-control和pragma能起到類似的請求。測試代碼如下:
          var x=new XMLHttpRequest();
          x.open(
          "GET","http://imgcache.qq.com/ac/qzone/gbk.js?ifmodifiedsince",false)
          x.setRequestHeader(
          "If-Modified-Since","0");
          x.send(
          null);
          var s=document.createElement('SCRIPT');
          document.getElementsByTagName(
          "HEAD")[0].appendChild(s);
          s.src
          ="http://imgcache.qq.com/ac/qzone/gbk.js?ifmodifiedsince";

          var x=new XMLHttpRequest();
          x.open(
          "GET","http://imgcache.qq.com/ac/qzone/gbk.js?cachecontrol",false)
          x.setRequestHeader(
          "Cache-Control","no-cache");
          x.send(
          null);
          var s=document.createElement('SCRIPT');
          document.getElementsByTagName(
          "HEAD")[0].appendChild(s);
          s.src
          ="http://imgcache.qq.com/ac/qzone/gbk.js?cachecontrol";
          var x=new XMLHttpRequest();
          x.open(
          "GET","http://imgcache.qq.com/ac/qzone/gbk.js?Pragma",false)
          x.setRequestHeader(
          "Pragma","no-cache");
          x.send(
          null);
          var s=document.createElement('SCRIPT');
          document.getElementsByTagName(
          "HEAD")[0].appendChild(s);
          s.src
          ="http://imgcache.qq.com/ac/qzone/gbk.js?Pragma";

          FireFox下,用if-modified-since下載成功腳本后,引用腳本時仍然下載了一份完整的腳本,說明xhr的這個請求沒有被cache住。用cache-control和pragma的時候,應用腳本時就不再下載腳本而從cache里面讀了。



          但是這兩個header不能讓瀏覽器拋棄已有的cache,只能讓瀏覽器重新驗證一下版本是否最新的。對于腳本被截斷并且cache的情況,瀏覽器會驗證到版本是最新的而不會更新那個“版本正確內容錯誤”的文件cache。

          對于其他主流非IE瀏覽器,這兩個header也沒有用,還是各cache各的,暫時還不知道如何用xhr來沖掉cache。
          posted on 2010-01-28 15:29 emu 閱讀(397) 評論(0)  編輯  收藏 所屬分類: DHTML和JAVASCRIPT 技術
          主站蜘蛛池模板: 扬中市| 定结县| 房产| 无棣县| 民县| 离岛区| 黔西| 宜黄县| 西和县| 拜泉县| 西宁市| 如东县| 洞口县| 简阳市| 特克斯县| 聊城市| 台江县| 安溪县| 南陵县| 长寿区| 泸西县| 申扎县| 贵州省| 天镇县| 岱山县| 沈阳市| 武乡县| 五峰| 新和县| 昌平区| 宁武县| 永昌县| 林芝县| 涟源市| 河源市| 沙河市| 海安县| 瑞丽市| 满城县| 南城县| 桐梓县|