如何处理 localStorage 使用中的错误(如空间超出错误)

2022-12-31 0 458

如何处理 localStorage 使用中的错误(如空间超出错误)

假定您想在填入工程项目以后检查和 localStorage 与否已满:您会是不是做?

好吧,应用程序多于一类形式沙莱县储存与否已满:当您试著储存未充填到 localStorage 的工程项目时,它会放出严重错误(一般而言称为 QuotaExceededError)。因而,要处置那个某一的示例,您要将 localStorage.setItem 包装袋在 try & catch 中,以检验 localStorage 中与否有足够多的内部空间来储存该工程项目:

(functionapp(){try {localStorage.setItem(keyName, keyValue);} catch (err){//处置内部空间严重不足的情形// item in localStorage.}})();

虽然此种形式有效率,但您如果读懂,localStorage 不能仅在没需用内部空间时放出。它还会引起全力支持严重错误(比如,即使应用程序不全力支持 localStorage API)和安全可靠严重错误(比如,即使在这类应用程序中以专有商业模式下载时 localStorage API 受限)。

要界定这类严重错误和内部空间严重不足的严重错误,您能试著隐式检验 QuotaExceededError 并采取有效率的犯罪行为:

/*** 确认严重错误与否为 QuotaExceededError。* *应用程序会放出大同小异的QuotaExceededError的表音文字* (t这对旧的应用程序/版而言特别如此),因而他们须要检查和* 相同的表头和值,以保证他们囊括每一类边沿情形。* *@paramerr -要检查和的严重错误* @return Is the error a QuotaExceededError?*/functionisQuotaExceededError(err: unknown): boolean {return ( errinstanceofDOMException &&// everything except Firefox(err.code ===22// Firefox err.code ===1014// test name field too, because code might not be present// everything except Firefox err.name ===”QuotaExceededError”// Firefox err.name ===”NSERRORDOMQUOTAREACHED”));}(functionapp(){try {localStorage.setItem(keyName, keyValue);} catch (err){if (isQuotaExceededError(err)){//处置内部空间严重不足的情形} else {//处置不全力支持 localStorage API 的情形。}}});

有一类比每次在 localStorage 中储存内容时检查和严重错误类型更好的形式。

上面代码中您会看到,应用程序放出与内部空间无关的严重错误的唯一情形是不全力支持 localStorage API。

因而,他们能在开始采用以后单独检验 localStorage 的需用性(一次),而不是每次调用 setItem 时都考虑它。

下面的完整代码片段是 MDN 的特征检验 localStorage 代码片段的轻微表音文字。它需用于检查和实现 Web Storage API 的任何 API 的全力支持——因而它适用于 localStorage 和 sessionStorage

/*** 确认严重错误与否为QuotaExceededError。* * Browsers love throwing slightly different variations of QuotaExceededError *(this is especially true for old browsers/versions), so we need to check * different fields and values to ensure we cover every edge-case.* *@paramerr -要检查和的严重错误* @return 严重错误是 QuotaExceededError 吗?*/functionisQuotaExceededError(err: unknown): boolean {return ( errinstanceofDOMException &&// everything except Firefox(err.code ===22// Firefox err.code ===1014// test name field too, because code might not be present// everything except Firefox err.name ===”QuotaExceededError”// Firefox err.name ===”NSERRORDOMQUOTAREACHED”));}/*** 确认与否全力支持实现 Web Storage API(localStorage 或 sessionStorage)的储存。* *应用程序能通过相同的形式使储存不能被访问,比如在全局对象上完全不暴露它,或者在你访问/储存一个工程项目时就放出严重错误。* 为了说明所有这些情形,他们试著用try & catch来储存一个假工程项目,以分析放出的严重错误。* @paramwebStorageType -要检查和的 Web 储存 API *@return 与否全力支持Storage?*/functionisStorageSupported( webStorageType:”localStorage””sessionStorage”= “localStorage”): boolean {letstorage: Storage undefined;try { storage = window[webStorageType];if (!storage){returnfalse;}constx = storagetest; storage.setItem(x, x); storage.removeItem(x);returntrue;} catch (err){//仅当已储存这类内容时,他们才会确认 QuotaExceededError。constisValidQuotaExceededError =isQuotaExceededError(err)&& storage.length >;returnisValidQuotaExceededError;}}(functionapp(){if (!isStorageSupported(“localStorage”)){//处置不全力支持localStorage API的情形return;}//你现在能采用setItem,如果它放出异常,只能说明localStorage已满。try {localStorage.setItem(keyName, keyValue);} catch (err){//处置 localStorage 已满的情形。}});

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务