Я не уверен, как это ярмарка кросс-браузерная. Я по крайней мере заставил его работать в Chrome, Firefox и IE9 и IE8 / 7 в режиме совместимости, но вы будете предупреждены о всплывающих окнах. Вы можете определить, заблокированы ли всплывающие окна, и отказаться от загрузки чего-либо до тех пор, пока они не будут включены для вашего сайта. См. Обнаружение заблокированного всплывающего окна в Chrome
Я использую jQuery для привязки к событию beforeunload, вы можете использовать предпочитаемое вами решение.
jQuery(function ($) {
$(window).bind('beforeunload', function () {
window.open("", "_savedata", "titlebar=0,width=100,height=100").saveData = window.saveData;
});
var store = window.open("", "_savedata");
window.saveData = store.saveData;
store.close();
});
Пример: (обновить страницу несколько раз)
http://jsfiddle.net/hZVss/1/
И по запросу @Raynos - состояние постоянного закрытия - что-то, что вы не можете сериализовать (по крайней мере, работает в firefox и chrome, IE называет это проблемой безопасности, но может быть связано с тем, как jsfiddle использует фреймы)
http://jsfiddle.net/ght9f/2/
Отказ от ответственности : я бы не ручался за элегантность этого решения. Мне было просто любопытно, как сохранить состояние объекта с помощью всплывающих окон. Сериализация вашего объекта в JSON и его хранение в хранилище на стороне клиента гораздо лучше (@Raynos рекомендует использовать газонное кресло https://github.com/brianleroux/lawnchair/). Если вы можете, то следует избегать использования файлов cookie, поскольку эти данные отправляются обратно на сервер, что может быть не идеально .
Если вашей главной целью было сохранение ссылок на всплывающие окна, вы можете сделать это, дав всплывающему окну имя. Именно так я сохраняю свою ссылку на всплывающее окно, которое я создаю при обновлении.