Mau*_*ord 9 javascript firefox local-storage
在我们的一个用户投诉并运行一些测试之后,Firefox 15和16(以及可能是旧版本)出现了这样的情况,如果您禁用cookie,您也会禁用localStorage.你甚至不能为它创建一个填充工具作为每当您尝试访问window.localStorage你Error: The operation is insecure.
抛出try catch将让您检查它是否已禁用,但不允许您使用自己的解决方案替换该变量.以下快速填充将无法工作,因为FF忽略设置变量,并在尝试访问时抛出相同的错误:
try{
window.localStorage;
}catch(err){
window.localStorage = {
getItem: function(k){
return this.k;
},
setItem: function(k,v){
this.k = v;
}
};
}
Run Code Online (Sandbox Code Playgroud)
唯一的解决方案似乎是将"假"localStorage移动到另一个变量,但这会很烦人,因为我们有很多代码和一个依赖于访问这个变量的js lib.有解决方案吗
编辑:仅弹出警报以告知用户需要cookie是不理想的.如果访问者只想查看网站而不注册,那么他们真的不需要cookie.但作为backbone.js应用程序并传递大量数据,我们确实在localStorage中存储了很多东西.
我们使用它作为本地存储的库。
(function (window, $, undefined) {
var store = window.store = {};
function deserialize(val) {
if (!val) return null;
var obj = $.parseJSON(val);
return obj;
};
function processRequest(loc, key, value) {
var obj;
// if value is not specified at all assume we are doing a get.
if (value === undefined) {
// GET
obj = loc.getItem(key);
return deserialize(value);
} else {
// SET
loc.setItem(key, JSON.stringify(value));
}
}
store.Local = function(key, value) {
return processRequest(window.localStorage, key, value);
};
store.Session = function(key, value) {
return processRequest(window.sessionStorage, key, value);
};
} (window, jQuery));
Run Code Online (Sandbox Code Playgroud)
您可以轻松添加一些测试代码来回退到非持久数组。
| 归档时间: |
|
| 查看次数: |
2792 次 |
| 最近记录: |