不修改数据之前的javascript

不修改数据之前的javascript,javascript,onbeforeunload,Javascript,Onbeforeunload,脚本在卸载之前对onbeforeunload求值,保存到本地存储,但我的问题是:它不改变任何数组或对象,也不允许任何新变量 当我在将对象保存到本地存储之前需要修改对象时,这会造成阻碍 这似乎是JavaScript的一个限制,因为警报也不会被触发 有没有什么办法可以让你得逞呢 var saved = { hello: "world" }; var anArray = ["default"]; saveData = function () { console.warn('Saving da

脚本在卸载之前对onbeforeunload求值,保存到本地存储,但我的问题是:它不改变任何数组或对象,也不允许任何新变量

当我在将对象保存到本地存储之前需要修改对象时,这会造成阻碍

这似乎是JavaScript的一个限制,因为警报也不会被触发

有没有什么办法可以让你得逞呢

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;