2009-09-02 2 views
3

Вот ситуация:Javascript прерывания событие

Если я нахожусь в странице-1 теперь я нажав ссылку на страницу-1, чтобы перейти к странице-2. Перед загрузкой страницы-2 я нахожусь в бегстве, так что все еще остаюсь на странице 1.

В этот момент я хочу отслеживать это событие.

Есть ли какие-либо события javascript, чтобы я мог отслеживать вышеупомянутый сценарий.

Дополнительная информация:

Чтобы избежать одновременного запроса на «странице-2», когда пользователь нажимает на ссылку со страницы-1 я перенаправлять на страницу-2 и отключение связи (чтобы избежать многократного запрос .. «страница-2) на данный момент, когда мы попали Esc и прервать загрузка страницы-2, мне нужно, чтобы включить ссылку снова страницу-1

+0

Я не уверен, что это возможно без какого-либо таймера или взлома браузера. И если вы используете этот хак, появится много проблем с разными браузерами. Не могли бы вы объяснить, зачем вам это событие? Может быть, есть лучший способ решить вашу проблему? – bezmax

+1

Чтобы избежать параллельного запроса на «страницу-2», когда пользователь нажимает ссылку со страницы-1, я перенаправляюсь на страницу-2 и отключая ссылку (чтобы избежать множественного запроса на «стр. 2»). В этот момент мы нажимаем Esc и прерываем загрузку страницы-2, мне нужно снова включить ссылку на странице 1. – Madhu

+0

@Madhu: эта дополнительная информация полезна, вы должны добавить ее в вопрос. –

ответ

3

Я попытался с помощью этого кода:

<html> 
<head> 
    <script> 
    document.onkeypress = KeyPressed; 

    function KeyPressed(e) 
    { 
     if (!e) e = window.event; //IE Compatibility 
     alert(e.keyCode); 
    } 
    </script> 
</head> 

<body> 
    <a href="http://stackoverflow.com">Stack Overflow</a> 
</body> 
</html> 

It обнаруживает любую нажатую клавишу, когда вы находитесь на странице. Как только вы нажмете на ссылку SO и удалите побег, noth происходит. Браузер уже получает ответ от SO-сервера и начинает его обрабатывать, эта страница уже «оставлена», несмотря на появление, когда вы видите «Ожидание http://stackoverflow.com» в строке состояния вашего браузера.

0

Два события запускаются при разгрузке страницы.

Вы можете использовать эти события, чтобы отменить выгрузку страницы, однако после этого страница считается выполненной.

Что вы можете сделать, это сделать страницу ждать 5 секунд или около того, прежде чем идти к новой странице:

например:

window.onunload = (function() { 
    var time = new Date(); 
    var cancel = false; 
    window.onkeypress = function (e) { 
    if ((e || window.event).keyCode == 27) cancel = true; 
    }; 
    while(time > new Date() - 5000) { 
    if (cancel) return false; 
    } 
}); 

В самом деле, что может вызвать некоторые браузеры, чтобы повесить, так как вы занимая все время процесса, заданное сценарию JS. т.е.: в блоке while.

Возможно, вы могли бы избежать этого, выполнив вызов функции блокировки, который не является настолько интенсивным процессом, как тот, который связан сетевой задержкой. например: XMLHttpRequest() и т. д. Я не думаю, что вызовы, которые поставлены в очередь, такие как setTimeout(), будут работать здесь, так как они не блокируются.

+0

Да, это закроет браузер. –

0

Поскольку тег <a href> указывает браузеру перейти на другую страницу, это зависит от него, чтобы решить, будет ли он работать по-прежнему. Если бы я был таким, я бы не стал слушать.

Если вы хотите переопределить это, я думаю, вы должны сообщить браузеру не слушать конкретный onClick события, и поставить обратный вызов на месте, которое загружает целевую страницу в фоновом режиме. Это гарантирует, что ваша страница все еще активна. После того, как целевая страница загрузится (по вашему сценарию), вы можете попросить браузер обновить себя с принятым контентом.

Итак, это теория. Я понятия не имею, позволяет ли DOM просто переопределить содержимое загруженной страницы, но я предполагаю, что это так.

+0

Если целевая страница находится на другом сервере, JS не позволит вам запросить ее. – Alsciende

+0

Я не эксперт - нет возможности класса HttpRequest для javascript? Вы можете сделать XMLHttpRequest, не так ли? – xtofl

1

Ваша идея справиться с этим событием проста. Блокировка кнопки требуется, чтобы пользователь не мог выполнять двойные сообщения. Тем не менее, запрос отправляется мгновенно (!) после щелчка по ссылке.

Итак, если вы нажмете ссылку один раз, остановите страницу, затем нажмите второй раз - она ​​будет отправлять ее дважды, и это не то, что должно произойти.