$ (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 |
| ||
Эксперт Профиль Репутация: нет Нужно что б когда пользователь закрывал окно то выскакивал конфирм или он действительно хочет выйти. если Cancel то тогда нужно оставлять его на страничке и выполнять потом просто локатион.. делаю как в коде ниже то локатион не срабатывает и окно закрывается всеровно.. как это исправить?
| |||
|
IDVsbruck |
| ||
|
Reptor |
| ||
Эксперт Профиль Репутация: нет | |||
|
ksnk |
| ||
прохожий Профиль Репутация: 38
Функция обязана выдавать строку, которая будет показана в стандартном окне конфирма. Для Оперы — не работает. Добавлено через 2 минуты и 45 секунд секунду в функции, выдающей строчку. Если таймаут тикнул — юзер испугался выходить. | |||
|
Reptor |
| ||
Эксперт Профиль Репутация: нет | |||
|
Reptor |
| ||
Эксперт Профиль Репутация: нет ksnk, смотри а ещё такой вопрос. у меня есть ссылка при нажатии на которую вот такой код и вместо отдачи файла выходит что вылазит окно которое при закрытии браузера.. и локатион не происходит | |||
|
Reptor |
| ||
Эксперт Профиль Репутация: нет | |||
|
ksnk |
| ||
прохожий Профиль Репутация: 38 Hello! Here is last photos |
Reptor |
| ||
Эксперт Профиль Репутация: нет даже так делаю $(«body»).load(downloadLink);javascript:%20sendForm(‘submit’); и то выскакивает тот алерт Добавлено через 7 минут и 2 секунды
| |||
|
3yko |
| ||||||||||
Код |
$(window).unload( function() < alert(‘unload’); > ); |
в FF получается только таким способом
Код |
window.onbeforeunload = function() < alert(‘on before unload’); > |
причем через jQuery bind аналогичный код не работает
А вот в опере ни тот, ни другой способ не действуют, ровно как и и не действует метод, описанный в рамках этой темы. Хотелось бы узнать, возможно ли вообще, пусть не предотвратить, но хотя бы узнать о закрытии дочернего окна?
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Применение библиотек | Следующая тема » |
[ Время генерации скрипта: 0.1575 ] [ Использовано запросов: 21 ] [ GZIP включён ]
Источник