Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2011, 00:42   #1
Gosyan
 
Регистрация: 08.12.2011
Сообщений: 6
По умолчанию Вызов события при закрытии вкладки, JavaScript

Добрый ночи, форумчане! Совсем недавно начал изучать JavaScript и столкнулся с проблемой:
имеется php скрипт, при выполнении которого заносится временной промежуток онлайна пользователя в базу данных mysql.
При логауте через кнопку все работает отлично, но хотелось бы проработать вариант с закрытием вкладки или окна браузера.
Для этого решил использовать объект XMLHttpRequest, скрипт получился такого вида:
Код:
function closewin() {
var urld = document.URL
var param = 'urld=' + urld
url = new XMLHttpRequest();
url.open('POST','*адрес пхп скрипта',true);
url.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
url.send(param);
}
window.onbeforeunload = closewin();
Вот тут-то и подкралась проблема, событие window.onbeforeunload так же вызывается при обновлении страницы и переходе по любой ссылке.

Как тогда можно отфильтровать вызов события, чтоб скрипт вызывался только при закрытии вкладки? Не найдя решения в интернетах, решил сделать проверку переданной переменной с определенным значением, но тогда возникает другой вопрос- чему будет равна переменная urld при закрытии браузера? Значение не удалось узнать ни alert'ом, ни записью переменной в текстовый файл.

Очень надеюсь на вашу помощь.
Gosyan вне форума Ответить с цитированием
Старый 08.12.2011, 08:56   #2
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Цитата:
Как тогда можно отфильтровать вызов события, чтоб скрипт вызывался только при закрытии вкладки?
Никак. Отследить закрытие вкладки никакими способами нельзя.

Отмечайте время последнего обновления, а по таймоуту считайте пользователя отключённым.
Виталий Желтяков вне форума Ответить с цитированием
Старый 08.12.2011, 18:41   #3
Gosyan
 
Регистрация: 08.12.2011
Сообщений: 6
По умолчанию

Ох, очень жаль. А что, если использовать таймаут в таком виде:
Код:
function closewin() {

setTimeout(savedata, 600000)
function savedata() {
var urld = document.URL
var param = 'urld=' + urld
url = new XMLHttpRequest();
url.open('POST','*адрес пхп скрипта',true);
url.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
url.send(param);
}
}
window.onbeforeunload = closewin();
Будет ли сильная нагрузка? Или хотя бы будет ли работать?) Заранее прошу прощения за такой "быдло" код
Gosyan вне форума Ответить с цитированием
Старый 09.12.2011, 07:08   #4
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Нормальный код. По поводу тайоута - у меня лично, 5000.
Виталий Желтяков вне форума Ответить с цитированием
Старый 14.12.2011, 02:30   #5
Gosyan
 
Регистрация: 08.12.2011
Сообщений: 6
По умолчанию

Благодарю за помощь! Буду реализовывать таким способом.
Gosyan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрытие панелей инструментов при открытии и отображение при закрытии документа Василий. Microsoft Office Word 0 23.10.2010 00:41
Вызов события компонента на другой форме Lokos Общие вопросы Delphi 4 02.08.2010 11:12
Вызов события из произвольного участка кода в WPF Casper-SC Общие вопросы .NET 1 24.07.2010 10:23
Событие при выборе вкладки VistaSV30 Microsoft Office Access 2 25.01.2010 21:11
ошибка при закрытии adoquery Банзай БД в Delphi 7 03.09.2007 19:31