gpt4 book ai didi

javascript - ngStorage 在 Chrome iframe 中崩溃

转载 作者:行者123 更新时间:2023-11-28 08:05:39 25 4
gpt4 key购买 nike

Chrome 在跨域 iframe 内运行时拒绝访问 localStorage。
这会导致 ngStorage 使整个应用程序崩溃

演示: http://jsfiddle.net/e8y85/

堆栈跟踪:

Error: Failed to read the 'localStorage' property from 'Window': Access is denied for this document.
at Error (native)
at Object. (https://rawgit.com/gsklee/ngStorage/master/ngStorage.js:42:41)
at Object.d [as invoke] (https://code.angularjs.org/1.1.5/angular.min.js:28:304)
at https://code.angularjs.org/1.1.5/angular.min.js:30:39
at c (https://code.angularjs.org/1.1.5/angular.min.js:27:142)
at d (https://code.angularjs.org/1.1.5/angular.min.js:27:276)
at Object.instantiate (https://code.angularjs.org/1.1.5/angular.min.js:28:434)
at https://code.angularjs.org/1.1.5/angular.min.js:53:326
at https://code.angularjs.org/1.1.5/angular.min.js:44:274
at n (https://code.angularjs.org/1.1.5/angular.min.js:7:74)

正如 Dave 所说,当阻止跟踪 cookie 时会发生这种情况。然而,强制我们的用户接受跟踪 cookie 并不是一种选择

Chrome Security Settings

是否有任何解决方法可以使其不崩溃?
丢失存储的数据不是问题。

默认浏览器设置:
Browser defaults

最佳答案

您正在使用的 ngStorage 模块包含用于检查是否支持本地存储的代码:支持:

var webStorage = $window[storageType] || ($log.warn('This browser does not support Web Storage!'), {})

但是,正如您所注意到的,这并不处理受支持但尚未禁用的情况。

最简单的解决方案是修改 ngStorage 本身来处理这种情况。例如:

var webStorage;
try {
webStorage = $window[storageType] || ($log.warn('This browser does not support Web Storage!'), {});
}
catch (ex) {
webStorage = {};
$log.warn('Access to web storage is denied.')
}

似乎已经有 an issue open for this附加了类似的代码更改。

由于 ngStorage 在实例化这些服务时崩溃,您还可以更改应用程序以根据您自己的检查有条件地加载 $localStorage,但代价是一些丑陋的,非惯用代码:

var localStorage;
try {
localStorage = $window.localStorage;
}
catch (ex) {}

var $localStorage = localStorage ? $injector.get('$localStorage') : {};

这假设您不是请求 Controller 中的 $localStorage 依赖项,而是请求 $window$injector,然后实例化 $localStorage 只有在您证明它可以工作之后才能动态地进行。如果您在应用程序的许多地方访问本地存储,那么您可以将其分解到您自己的服务中。不过,插入补丁包含在 ngStorage 中肯定更干净。

关于javascript - ngStorage 在 Chrome iframe 中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24811958/

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