localStorage和sessionStorage火狐瀏覽器和其他高級瀏覽器的區別


例子:

<script>
window.onload=function(){
var oSetData = document.getElementById('setData');
var oGetData = document.getElementById('getData');
oSetData.onclick=function(){
  if(window.localStorage){
    console.log('支持');
    localStorage.date1 = '{"content":{"img":"/static/img/listico1.jpg","content":"如何采取正確的方式進行救治1","date":"2015年11月28日14:14"}}';
    localStorage.date2 = '{"content":{"img":"/static/img/listico2.jpg","content":"如何采取正確的方式進行救治2","date":"2015年11月28日14:14"}}';
    localStorage.date3 = '{"content":{"img":"/static/img/listico3.jpg","content":"如何采取正確的方式進行救治3","date":"2015年11月28日14:14"}}';
  }
};
oGetData.onclick=function(){
  if(window.localStorage){
    //var count = 0;
    for(var name in localStorage){
      console.log(name);
      //if(count<localStorage.length){
        var str = localStorage[name];
        var json = new Function('return '+str)();
        console.log(json);
      //}
      //count++;
    }

  }
};
};
</script>

<body>
<input id="setData" type="button" value="設置"/>
<input id="getData" type="button" value="獲取"/>
</body>

這段測試的代碼用調試工具可以看出火狐瀏覽器和其他高級瀏覽器(谷歌)的區別,在調試工具中找到localStorage/sessionStorage可以看出,這個時候火狐瀏覽器是報錯的(SyntaxError: missing ] after element list)[native code],我分析的原因是火狐的name值這個時候有9個(可以把代碼中var str =.../var json =...都注釋掉就可以看到),date1/2/3是設置出來的,后面還有key/getItem/setItem/removeItem/clear/length這些是localStorage/sessionStorage對象的屬性和方法,在用for..in..的時候會遍歷到它們,當遍歷到key方法時,new Function('return '+str)()執行這條語句時就會報錯。其他瀏覽器不會這樣,name值只是設置出的三個,用for..in..的時候不會遍歷到localStorage/sessionStorage對象的屬性和方法。我發現這些瀏覽器localStorage/sessionStorage的length值是一樣的,所以解決方案就是注釋里的代碼,添加了一個計數器,再進行判斷,當count大於length的時候,就不用執行后面的語句(不是我想獲取的數據),這樣就解決了火狐瀏覽器兼容問題。要是我有錯誤的地方請幫忙指出,有更好的方法希望可以交流。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM