Как перехватить целевой URL в событии onbeforeunload - PullRequest
2 голосов
/ 03 октября 2010

Я хочу использовать onbeforeunload, чтобы отправить сообщение пользователям перед тем, как покинуть определенные страницы.Можно ли узнать, к какому URL они должны перейти при событии onbeforeunload?

Спасибо

Ответы [ 2 ]

5 голосов
/ 03 октября 2010

Можно ли узнать, к какому URL они должны перейти при событии onbeforeunload?

Нет, определенно нет.Событие onbeforeunload сообщает вам только, что страница должна быть выгружена, но не почему.

2 голосов
/ 03 мая 2014

Зависит от того, как пользователь покидает страницу.Если они набирают URL в адресной строке - тогда вам не повезло.Насколько я знаю, нет способа захватить URL-адрес перехода в адресной строке.

Если они нажимают на ссылку, содержащуюся где-то на странице, - вы можете использовать событие click для захвата URL-адреса, а затемрешить, как вы хотите справиться с вещами.

Я задал похожий вопрос
Как я могу получить целевой URL ссылки на веб-странице в событии javascript onbeforeunload?
, потому что у меня был проект, который нужно исправитьФорма оптового заказа.В процессе оформления заказа клиенты моего клиента возвращаются в каталог, чтобы проверить страницу сведений о продукте и потерять текущую информацию в форме заказа.
Используя приведенный ниже код (который использует JQuery, хотя яуверен, что вы можете создать то же самое в чистом Javascript, если нужно). Я мог бы сказать, когда пользователь щелкнул ссылку, которая оставляла форму заказа, а затем дал им возможность открыть ссылку в новом окне / вкладке или загрузить URL-адрес.в текущем окне и потерять данные формы или просто вернуться к форме.Этот код работает со всеми основными браузерами, по крайней мере, с их более поздними версиями.

$('body a').click(function(e) {     
    //if link references a page element
    if ($(this).attr('href').charAt(0)=="#") {
        return;
    }

    //check if link is to same window    
    var pathname = window.location.pathname;
    var pathname2 = $(this).attr('href');
    pathname2 = pathname2.replace(/^.+\.\//, '');
    if (pathname.indexOf(pathname2) >= 0) {
        //link clicked is contained on same page
        //prevent page from getting reloaded & losing data
        e.preventDefault();
        e.stopImmediatePropagation();
        e.stopPropagation();    
        return;     
     }

    //link clicked on is another page
    if (hasMerchandise) {  //var to indicate user has items on order form       
        //give user options: leave page, open link in other page, stay, etc.
        // $('.popupForm-handleExitRequest').click();   //roll your own code    

        //prevent page from getting reloaded & losing data
        //in case user wants to cancel page change or open link in another window
        e.preventDefault();
        e.stopImmediatePropagation();
        e.stopPropagation();            
    } else {
        //load new page
        $(this).removeAttr('target');
    }       
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...