gpt4 book ai didi

javascript - 在不同的浏览器中检测 localStorage v sessionStorage 对象

转载 作者:行者123 更新时间:2023-11-29 14:57:45 25 4
gpt4 key购买 nike

我正在编写一个能够使用 localStorage 或 sessionStorage 的 Javascript 类。此项的选择是在类实例的基础上完成的。

我在此类中有一个方法,它接收存储对象作为参数并根据存储类型(即本地 v session )运行操作。

例如。

function myMethod(store){
// store: object storageObject
// The storage object being used (either
// sessionStorage or localStorage).

if(store === sessionStorage){
return sessionAction(store)
}else if(store === localStorage){
return localAction(store)
}

return null;
}

这在 Internet Explorer 8 中不起作用,会产生错误:“类不支持自动化”。它似乎在其他浏览器中运行良好。

我尝试获取对象类型(通过 Object.prototype.toString.call(store))并针对它进行测试,但 IE8 总是报告 [object Object ] 为了这。我设法从回答 Stackoverflow 问题取得了一些进展:Weird IE8 internal [[ class ]] attribute behavior .此变通方法为我提供了 IE 中的 [object Storage]。

但是,我仍然无法在不同的存储类型之间进行检测。是否有一种简单的方法来检测跨浏览器工作的两种类型?

我可以重写它,这样就不必将类型作为参数提供给方法。但是,我宁愿通过允许用户简单地提供存储对象来降低 API 的简单性。

最佳答案

您可以积极 IE8 代码分支(受 Modernizr 启发):

比较存储:

function storagesEqual(testStorage, webStorage) {
try {
return testStorage === webStorage;
} catch (ex) {
// IE8 code branch
var testKey = "storage-test";
var testValue = (new Date()).valueOf().toString();
var result = false;

try {
webStorage.setItem(testKey, testValue);
if(testStorage[testKey] === testValue) {
webStorage.removeItem(testKey);
result = true;
}
} finally {
return result;
}
}
}

识别存储类型:

function storageType(store) {

var STORAGE_LOCAL = 'local';
var STORAGE_SESSION = 'session';
var STORAGE_UNKNOWN = 'unknown';

var localStorage = window.localStorage;
var sessionStorage = window.sessionStorage;

if(storagesEqual(store, localStorage)) return STORAGE_LOCAL;
if(storagesEqual(store, sessionStorage)) return STORAGE_SESSION;
return STORAGE_UNKNOWN;
}

关于javascript - 在不同的浏览器中检测 localStorage v sessionStorage 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15157631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com