不修改数据之前的javascript
脚本在卸载之前对onbeforeunload求值,保存到本地存储,但我的问题是:它不改变任何数组或对象,也不允许任何新变量 当我在将对象保存到本地存储之前需要修改对象时,这会造成阻碍 这似乎是JavaScript的一个限制,因为警报也不会被触发 有没有什么办法可以让你得逞呢不修改数据之前的javascript,javascript,onbeforeunload,Javascript,Onbeforeunload,脚本在卸载之前对onbeforeunload求值,保存到本地存储,但我的问题是:它不改变任何数组或对象,也不允许任何新变量 当我在将对象保存到本地存储之前需要修改对象时,这会造成阻碍 这似乎是JavaScript的一个限制,因为警报也不会被触发 有没有什么办法可以让你得逞呢 var saved = { hello: "world" }; var anArray = ["default"]; saveData = function () { console.warn('Saving da
var saved = { hello: "world" };
var anArray = ["default"];
saveData = function ()
{
console.warn('Saving data...');
saved['test'] = true;
anArray.push('something');
localStorage.setItem('test', 'somedata');
console.debug(saved);
console.debug(anArray);
window.onbeforeunload = null;
console.warn('Done saving...');
return true;
}
proxySave = function ()
{
setTimeout(saveData, 0);
return;
}
window.onbeforeunload = proxySave;
setTimeout意味着在onbeforeunload期间代码不会运行,这意味着所有下注都已关闭。如果要在onbeforeunload期间执行某些操作,请在onbeforeunload期间执行:
并删除saveData中的返回true
是的,在onbeforeunload中可以执行的操作有限制,但基本对象操作不在其中。为什么设置超时?您的页面可能会在setTimeout启动之前卸载,因此它永远不会启动。卸载处理程序中不允许使用警报,因为它太容易被滥用。为什么要使用setTimeout?它的唯一目的似乎是保证不保存任何内容。我搜索了解决方案,类似的问题是建议设置超时。好吧,这对我来说真的很有意义。谢谢你澄清这一点。
window.onbeforeunload = saveData;