emu in blogjava

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

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

          嘗試了一下一些能起類似作用的不同的header,發(fā)現(xiàn)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的時候,應(yīng)用腳本時就不再下載腳本而從cache里面讀了。



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

          對于其他主流非IE瀏覽器,這兩個header也沒有用,還是各cache各的,暫時還不知道如何用xhr來沖掉cache。
          posted on 2010-01-28 15:29 emu 閱讀(397) 評論(0)  編輯  收藏 所屬分類: DHTML和JAVASCRIPT 技術(shù)
          主站蜘蛛池模板: 勐海县| 沿河| 蒙自县| 峨眉山市| 合阳县| 秦安县| 阜宁县| 临江市| 太和县| 房产| 建水县| 延长县| 靖边县| 井冈山市| 武城县| 天津市| 辽宁省| 武定县| 小金县| 丹凤县| 红安县| 新丰县| 剑阁县| 且末县| 惠水县| 定日县| 绥江县| 宁津县| 科技| 特克斯县| 老河口市| 建湖县| 读书| 舟山市| 吉木萨尔县| 茶陵县| 西乌珠穆沁旗| 台湾省| 康平县| 蛟河市| 郧西县|