Window unload jquery не работает

$ (window) .unload не работает должным образом

Я делаю небольшое приложение для чата с PHP + MySQL + JavaScript, я написал функцию disonnectUser (), которая вызывается, когда пользователь нажимает кнопку отключения. Вот:

И это работает как талисман, но когда я вызываю эту функцию в другом контексте, когда пользователь вместо нажатия кнопки разъединения просто покидает страницу, в этой функции

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

3 ответа

Вместо разгрузки, как насчет до выгрузки?

Кроме того, ваш метод disconnectUser уже устанавливает connected в false , и здесь делать это не нужно.

Также кажется, что jQuery на самом деле не обрабатывает событие beforeunload , поэтому вам нужно вернуться к нативному JS для обработки этого:

Проблема состоит в том, что $(window).unload() не ждет ни одного вызова AJAX перед закрытием окна (что верно , потому что AJAX является асинхронным ).

Вы должны принудительно синхронизировать AJAX, то есть дождаться ответа. Внутри вашей disconnectUser функции:

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

Источник

Некоторые (странные?) Проблемы с window.unload в jQuery

Я использую следующий код (исключительно для тестирования):

И у меня есть два вопроса:

Почему это работает — то есть, почему я вижу два сообщения? Я где-то читал, что присоединение двух слушателей событий к одним и тем же объектам DOM не дает никакого эффекта; Второй и более слушатели игнорируются.

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

Как я уже писал в комментарии к этому вопросу, действительно ли вы считаете, что блокировка << X0>> в unload (от Chrome / WebKit) — это хорошая идея? Замена оповещения на console.log (как предлагается там) не даст вам большого полезного эффекта, так как консоль (по крайней мере, в Chrome) очищается сразу после обновления страницы или перехода на другую. Вы можете увидеть следы ваших сообщений, записанных на консоли за несколько миллисекунд до того, как они действительно исчезнут, поэтому я бы предпочел, чтобы это было бесполезно. Отключение оповещения при выгрузке не лучшая идея. Трудно провести серьезное тестирование, и «ужасные» страницы могут легко обойти проблему, отображая собственное «раздражающее» сообщение, не используя оповещения (пользовательский интерфейс jQuery, некоторые div и т. Д.).

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

2 ответа

Связывание нескольких обработчиков событий для одного и того же события (с помощью jQuery) наверняка вызовет запуск обоих. Возможно, вы думаете о последовательном назначении атрибутов элемента «onfoo», но это не тот механизм, который jQuery (или любая другая современная инфраструктура, которую я знаю) использует внутри себя.

Браузеры показывают alert() сообщения так, как они хотят. Он не контролируется кодом на странице.

Наконец, запрещение alert() в обработчиках событий «unload» является хорошей идеей для пользователей. Вы можете контролировать, очищает ли консоль отладки при загрузке страницы.

(по крайней мере, в Chrome) очищается сразу после обновления страницы или перехода на другую страницу

Настройте свой отладчик, чтобы сохранить консоль! Узнайте об особенностях инструментов, которые вы используете каждый день.

  • Chrome — правый клик на вкладке консоли, опция в контекстном меню
  • Firebug — кнопка в консоли

Источник

Window unload jquery не работает

Reptor
Дата 17.8.2009, 11:53 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0

Нужно что б когда пользователь закрывал окно то выскакивал конфирм или он действительно хочет выйти. если Cancel то тогда нужно оставлять его на страничке и выполнять потом просто локатион.. делаю как в коде ниже то локатион не срабатывает и окно закрывается всеровно.. как это исправить?

Код
$(window).unload( function () <
if (confirm(«Exit»)) <
>
>else
>);

Опытный

Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 4
Всего: 22

IDVsbruck
Дата 17.8.2009, 13:12 (ссылка) | (нет голосов) Загрузка .
Reptor
Дата 17.8.2009, 13:27 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0

ksnk
Дата 17.8.2009, 16:19 (ссылка) | (нет голосов) Загрузка .

прохожий

Профиль
Группа: Комодератор
Сообщений: 6854
Регистрация: 13.4.2007
Где: СПб

Репутация: 38
Всего: 385

Код
var root = window.addEventListener || window.attachEvent ? window : document.addEventListener ? document : null;
if(root) <
root.onbeforeunload=function () < return 'Exit?'; >;
>

Функция обязана выдавать строку, которая будет показана в стандартном окне конфирма.
Как-то повлиять на появляющееся окно низя.

Для Оперы — не работает.

Добавлено через 2 минуты и 45 секунд
Для какого-то действия — можно поставить таймаут на

секунду в функции, выдающей строчку. Если таймаут тикнул — юзер испугался выходить.

Reptor
Дата 17.8.2009, 16:48 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0

Reptor
Дата 17.8.2009, 17:03 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0

ksnk, смотри а ещё такой вопрос. у меня есть ссылка при нажатии на которую вот такой код

и вместо отдачи файла выходит что вылазит окно которое при закрытии браузера.. и локатион не происходит

Reptor
Дата 17.8.2009, 17:33 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0

ksnk
Дата 17.8.2009, 17:34 (ссылка) | (нет голосов) Загрузка .

прохожий

Профиль
Группа: Комодератор
Сообщений: 6854
Регистрация: 13.4.2007
Где: СПб

Репутация: 38
Всего: 385

Hello! Here is last photos

Reptor
Дата 17.8.2009, 17:37 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0

даже так делаю $(«body»).load(downloadLink);javascript:%20sendForm(‘submit’); и то выскакивает тот алерт

Добавлено через 7 минут и 2 секунды
ksnk, да и не забыть после этого снова выполнить код . (ня я просто остаюсь на той же страничке. там просто файлик предлагает загрузить)

Код
var root = window.addEventListener || window.attachEvent ? window : document.addEventListener ? document : null;
if(root) <
root.onbeforeunload=function () < return 'To prevent your PC from slowdown, press CANCEL.'; >;
>

Профиль
Группа: Участник
Сообщений: 1
Регистрация: 20.10.2007

Репутация: нет
Всего: нет

Возвращаясь к поднятой товарищем Reptor’ом теме.
Самому пришлось столкнуться с похожей проблемой. Открывается дочернее окно и требуется отследить момент, в который пользователь жмет по крестику и закрывает его. Причем работать должно на IE, FF, Opera и Chrome.

Использую jQuery.
Насколько мне удалось выяснить, в хроме и IE работает

3yko
Дата 1.10.2009, 15:16 (ссылка) | (нет голосов) Загрузка .
Код
$(window).unload(
function() <
alert(‘unload’);
>
);

в FF получается только таким способом

Код
window.onbeforeunload = function() <
alert(‘on before unload’);
>

причем через jQuery bind аналогичный код не работает

А вот в опере ни тот, ни другой способ не действуют, ровно как и и не действует метод, описанный в рамках этой темы. Хотелось бы узнать, возможно ли вообще, пусть не предотвратить, но хотя бы узнать о закрытии дочернего окна?

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Применение библиотек | Следующая тема »

[ Время генерации скрипта: 0.1575 ] [ Использовано запросов: 21 ] [ GZIP включён ]

Источник

Читайте также:  Как настроить траст валет
Оцените статью