Какой самый ненавязчивый способ реализовать пользовательское диалоговое окно "beforeunload"?

Я говорю о стилизованном диалоге вместо стандартного диалога beforeunload, который не может быть стилизован.

Смотрите Facebook: Facebook выгрузить изображение

Какой самый ненавязчивый способ сделать это? Предпочтителен какой-то скрипт, который я объявляю один раз, и волшебным образом всегда работает.

Я думаю о чем-то вроде:

function showCustomDialog()
{
    [...]
}

var unfinished = true;

$('a').click(function()
{
    if ( unfinished )
    {
        window.showCustomDialog( { originalUrl: $(this).attr('href') } );
        return false;
    }
}

Но я боюсь, что это сломает случаи, когда то есть <a> Элемент используется для запуска JS-поведения или там, где JavaScript вызывает изменение window.location.href.

Есть ли лучший, ненавязчивый способ?

Дополнительное примечание- они также получили это работает для кнопки назад.

Дополнительное примечание - по-видимому, они возвращаются к диалогу по умолчанию, когда он находится вне их контроля.

1 ответ

Я думаю, что главная проблема заключается в том, что вы не можете предсказать каждое изменение в DOM, поэтому вы можете легко обновлять каждое событие mousemove (событие touch для смартфонов и т. Д.), Например, так:

$(document).off('mousemove').mousemove(function(){
      $('a').off('click').click(function(e){
           e.preventDefault();

           //your dialog goes here

      });
});
Другие вопросы по тегам