【问题标题】:Why does saving an empty textbox value to sessionStorage cause IE8 to crash?为什么将空文本框值保存到 sessionStorage 会导致 IE8 崩溃?
【发布时间】:2013-09-27 11:46:18
【问题描述】:

我创建了一个简单的示例来演示这一点。

<input id="search" type="text">

var input = document.getElementById('search');
window.sessionStorage.setItem('test', '');
alert(input.value === '');
window.sessionStorage.setItem('test2', input.value);
alert('complete');

在 IE8 中运行它会导致整个浏览器在存储 input.value 时崩溃,并出现标准错误 - “Internet Explorer 遇到问题,需要关闭...”。

localStorage 也是如此。

JSFiddle demo here

【问题讨论】:

    标签: javascript internet-explorer-8 web-storage


    【解决方案1】:

    我也遇到了这个问题,虽然我花了几分钟才弄清楚是 sessionStorage 导致了这个问题,而不是我们的 IE8 占位符小部件、knockout.js 绑定或modernizr。我们的文本框是&lt;input type="search" .../&gt;,这也不是问题。

    最奇怪的是,如果您使用 IE8 调试器工具检查该值,该值实际上是一个空字符串。但是,这似乎为我解决了这个问题:

    window.sessionStorage.setItem('test2', input.value || '');
    

    ... IE8 似乎更喜欢文字空字符串,而不是嵌套在另一个对象中或从函数返回的字符串..?

    【讨论】:

      【解决方案2】:

      对我来说最好的解决方案是:

      if(value)
          localStorage.setItem(name, value);
      else if(localStorage.getItem(name))
          localStorage.removeItem(name);  
      

      我认为这是使用存储的最佳方式 - 不是保存空值,而是从那里删除它。

      【讨论】:

      • 我在生产代码中使用了 Goncharov 的答案,它一直在正常工作,没有任何问题。谢谢。
      猜你喜欢
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-03
      • 1970-01-01
      相关资源
      最近更新 更多