4

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

<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 演示在这里

4

2 回答 2

1

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

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

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

于 2013-11-20T10:47:14.520 回答
1

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

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

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

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

于 2013-10-17T18:06:57.923 回答