sessionStorage 兼容ie浏览器写法
时间: 2023-09-20 10:07:26 浏览: 113
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
在 IE8 及以下版本中,sessionStorage 是不支持的,但可以通过 userData 来模拟实现类似 sessionStorage 的功能。
下面是一个简单的兼容 IE 的 sessionStorage 实现:
```javascript
if (!window.sessionStorage) {
Object.defineProperty(window, 'sessionStorage', {
value: {
getItem: function (key) {
return document.documentElement.getAttribute('sessionStorage-' + key);
},
setItem: function (key, value) {
document.documentElement.setAttribute('sessionStorage-' + key, value);
},
removeItem: function (key) {
document.documentElement.removeAttribute('sessionStorage-' + key);
}
}
});
}
```
上述代码中,我们首先判断浏览器是否支持 sessionStorage,如果不支持,则使用 Object.defineProperty 方法将 sessionStorage 定义为一个对象,并在这个对象上定义 getItem、setItem 和 removeItem 方法,实现对应的功能。
对于 IE8 及以下版本,我们可以使用 userData 来模拟实现 sessionStorage。
```javascript
if (!window.sessionStorage) {
Object.defineProperty(window, 'sessionStorage', {
get: function () {
if (!document.documentElement.getAttribute('sessionStorage')) {
var storage = document.createElement('input');
storage.type = 'hidden';
storage.style.display = 'none';
storage.addBehavior('#default#userData');
document.body.appendChild(storage);
var expires = new Date();
expires.setDate(expires.getDate() + 365);
storage.expires = expires.toUTCString();
document.documentElement.setAttribute('sessionStorage', true);
}
return document.documentElement.getAttribute('sessionStorage');
},
value: {
getItem: function (key) {
var storage = this.storage;
return storage.getAttribute(key);
},
setItem: function (key, value) {
var storage = this.storage;
storage.setAttribute(key, value);
storage.save('sessionStorage');
},
removeItem: function (key) {
var storage = this.storage;
storage.removeAttribute(key);
storage.save('sessionStorage');
},
storage: null
}
});
}
```
上述代码中,我们使用 Object.defineProperty 方法将 sessionStorage 定义为一个对象,并在这个对象上定义 getItem、setItem 和 removeItem 方法,实现对应的功能。同时,我们还定义了一个 storage 属性,用来保存 userData 对象。
在 sessionStorage 的 getter 方法中,我们首先判断是否已经创建了 userData 对象。如果没有,我们就创建一个 input 元素,并将其添加到页面中。然后,我们给这个 input 元素设置 expires 属性,指定 userData 的过期时间。最后,我们将一个标识设置为 documentElement 的属性中,表示已经创建了 userData 对象。
在 getItem、setItem 和 removeItem 方法中,我们都使用 storage 属性来获取或设置 userData 对象中的数据。每次修改数据时,我们都需要调用 save 方法来保存数据。
阅读全文