2015-06-07 3 views
-3

Сценарий оценивает onbeforeunload, сохраняет локальное хранилище, но вот моя проблема: он не изменяет никаких массивов или объектов и не допускает никаких новых переменных.javascript beforeunload не изменяющие данные

Это мешает, когда у меня есть объекты, которые необходимо изменить, прежде чем сохранять их в локальном хранилище.

Это похоже на ограничение 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; 
+0

Почему 'setTimeout()'? Ваша страница может быть выгружена до того, как срабатывает 'setTimeout()', поэтому она не будет срабатывать. 'alert()' не разрешено в обработчике выгрузки, потому что слишком легко злоупотреблять. – jfriend00

+1

Почему вы используете 'setTimeout'? Его единственная цель заключается в том, чтобы гарантировать, что ничего не спасено вообще. – Ryan

+0

Я искал решения, и аналогичная проблема предлагала setTimeout. –

ответ

0

setTimeout означает, что код не работает в течение onbeforeunload, то есть все ставки выключены. Если вы хотите сделать что-то во время onbeforeunload, сделайте это воonbeforeunload:

window.onbeforeunload = saveData; 

(. И удалить return true в saveData)

Да, есть ограничения на то, что вы можете сделать в onbeforeunload, но манипуляция базовыми объектами не является одним из них.

+0

Хорошо, это действительно имеет смысл для меня. Спасибо, что поняли это. –

Смежные вопросы