Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.04.2023, 20:47
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Время пребывания на странице
Привет. Хочу отправлять запрос со временем пребывания юзера на странице. Пришёл к этому
var old = "";
var current = window.location.href;
 var vt = (new Date).getTime();
 var ts = Math.round(vt/1000);
 var sec = ts % 60;
function changeUrl(current){
    if(current != old){
        alert(sec);
        old = current;
    }

    old = window.location.href;
    setInterval(function() {
        changeUrl(window.location.href);
    }, 1000);
}
changeUrl();


Но при переходе на другую страницу время продолжает добавляться к предыдущему. Понимаю, что надо в какой то момент отнять какое то время, но не могу понять когда и что.
Ответить с цитированием
  #2 (permalink)  
Старый 03.04.2023, 07:15
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Когда пользователь уйдет на другую страницу, скрипт пропадет.
setInterval каждый раз запускает бесконечную последовательность вызовов функций.

Последний раз редактировалось voraa, 03.04.2023 в 07:30.
Ответить с цитированием
  #3 (permalink)  
Старый 03.04.2023, 07:41
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Сообщение от ureech
Хочу отправлять запрос
А в какой момент запрос будет отправляться?
Ответить с цитированием
  #4 (permalink)  
Старый 03.04.2023, 09:46
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Я думаю в момент перехода на другую страницу
Ответить с цитированием
  #5 (permalink)  
Старый 03.04.2023, 10:07
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Сообщение от voraa
setInterval каждый раз запускает бесконечную последовательность вызовов функций.
Ок. Поменял на так

var old = "";
var current = window.location.href;
function changeUrl(current,sec){
    if(current != old){
        
        alert(sec);
        old = current;
    }
    
    old = window.location.href;

    setTimeout(function() {
        var vt = (new Date).getTime();
        var ts = Math.round(vt/1000);
        var sec = ts % 60;
        changeUrl(window.location.href,sec);
    }, 1000);
}

changeUrl();


Теперь sec undrfined)
Ответить с цитированием
  #6 (permalink)  
Старый 03.04.2023, 10:44
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Ну вроде что то получается.

date = new Date();
start = date.getTime();
function init() {
    var time = new Date();
    return (time.getTime() - start) / 1000;
}

function getTime() {
    var ts = Math.round(init());
    var sec = ts % 60;
var this_sec = "" + ((sec > 9) ? sec : "0" + sec);
    changeUrl(window.location.href, this_sec);
    setTimeout(function () {
        getTime(this_sec)
        
    }, 1000);
}
var old = "";
var current = window.location.href;
function changeUrl(current, this_sec) {
    if (current != old) {
        var sec = localStorage.getItem('lsec')
       alert(sec)// тут вместо alert() отправлю запрос       
        old = current;
    }
   localStorage.setItem('lsec',this_sec);
    old = window.location.href;
}
getTime()
Ответить с цитированием
  #7 (permalink)  
Старый 03.04.2023, 11:39
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Один баг. old всегда пустая. И получается, что при перезагрузки страницы запрос тоже отправляется. А не должен.
Ответить с цитированием
  #8 (permalink)  
Старый 03.04.2023, 12:06
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Просто отмечать начальное время, когда пользователь приходит на страницу, и засекать время, когда уходит.
Разницу между временами посылать в запросе на сервер.
Ответить с цитированием
  #9 (permalink)  
Старый 03.04.2023, 12:14
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Сообщение от ureech
Один баг. old всегда пустая
Конечно. Ведь новый window.location будет только когда новая страница загрузится. Старой и скрипта уже не будет.
Ответить с цитированием
  #10 (permalink)  
Старый 03.04.2023, 12:29
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Если надо учитывать сколько времени пользователь просматривал страницу, то наверно надо учитывать только то время, когда вкладка была активна. Если пользователь смотрел другую вкладку, минимизировал окно, переключился на другую задачу, то это не то время, что он смотрел страницу.
Что бы учесть все эти варианты надо использовать событие visibilitychange и смотреть когда вкладка становится активной и когда становится невидимой.
https://developer.mozilla.org/en-US/...tychange_event
Ну и если надо послать запрос на сервер с указанием сколько времени пользователь провел на странице, то это можно по событию unload послать запрос с помощью navigator.sendBeacon
https://developer.mozilla.org/en-US/...tor/sendBeacon
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите как написать небольшой скрипт.. nikoshot Элементы интерфейса 5 21.02.2023 00:30
Как сделать так, чтобы когда был определенный день недели и определенное время, то по shkarol Общие вопросы Javascript 2 23.08.2022 12:30
время время время .... dozer Оффтопик 21 21.08.2012 15:18
разное время выполнения операции ropowek Events/DOM/Window 2 08.10.2008 13:27
Ссылка на якорь на странице во фрейме niculins Общие вопросы Javascript 2 24.09.2008 12:23