Приглашение пользователя сохранить при выходе со страницы . Эта статья 4guys звучит как то, что вам нужно. Это говорит о событии onbeforeunload. Здесь есть несколько потрясающих сообщений здесь, на stackoverflow, также касающихся onbeforeunload.
Похоже, что onbeforeunload действительно не срабатывает для iframe. Мудак!
Вот пример кода, который должен работать. Это будет работать только в том случае, если вы находитесь в том же домене, в противном случае та же политика происхождения предотвратит возврат iframe к родителю.
Я также не проверял их во многих браузерах, поэтому YMMV .
У вас есть два варианта здесь, в зависимости от того, куда вы хотите поместить подсказку для логики изменений.
Вариант один включает в себя iframe, сообщающий родительскому окну об изменениях.
JavaScript родительского окна:
window.onbeforeunload=closeIt;
var changes = false;
function closeIt()
{
if (changes)
{
return "Yo, changes, save 'em?";
}
}
function somethingChanged() {
changes=true;
};
JavaScript-код iframe:
$(function() {
$('input').change(parent.somethingChanged);
});
Второй вариант включает в себя iframe, контролирующий onbeforeunload родительского окна
JavaScript родительского окна:
Нет ни одного: -)
JavaScript-код iframe:
$(function() {
parent.window.onbeforeunload = myCloseIt;
$('input').change(somethingChanged);
});
var changes = false;
function myCloseIt()
{
if (changes)
{
return "Yo, changes, save 'em?";
}
}
function somethingChanged() {
changes=true;
};
В любом варианте наивную переменную changes
можно немного увеличить, возможно, используя методы из статьи 4guys, чтобы узнать, действительно ли были действительно какие-либо изменения.
Если они находятся в разных доменах, но вы по-прежнему отвечаете за "обе стороны" HTML, есть еще варианты, они просто сложнее.
xssinterface - это библиотека, которая использует postMessage
, хеши локаций и секретную черную магию вуду для связи между сайтами.