OSX 中的 WebKit 框架有一个损坏的 localStorage 实现,它不会持久保存存储的数据(应用程序重启后数据不存在)。
所以我实现了一个替代的 LocalStorage 对象。
但是,我无法分配 window.localStorage = myLocalStorage
,因为 localStorage
被定义为不可写且不可配置。
我找不到通过使用 C/Obj-C API 来覆盖 JavascriptCore 中此类属性的方法。有办法吗?
最佳答案
您不能直接覆盖它,但可以使用 StorageItem 覆盖它。但是覆盖存储项将覆盖 session 存储和本地存储
var _setItem = Storage.prototype.setItem; // first assign it to some variable
Storage.prototype.setItem = function(key, value) {
if (this === window.localStorage) {
// play with localstorage here
} else {
// fallback
_setItem.apply(this, arguments);
}
}
第二种方法是用__proto__
属性覆盖,但这不是标准的,它在 firefox、chrom、opera 中支持,但其他的不确定
localStorage.__proto__ = Object.create(Storage.prototype);
检查这个例子,他们写了覆盖默认值来存储 JSON 对象
关于objective-c - 更改 JavascriptCore 中 window.localStorage 的值(从 C/Obj-C API 重新定义不可配置的属性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20547744/