2017-01-24 9 views
-2

Я хочу создать страницу, на которой выполняется сценарий jQuery, когда пользователь попадает на страницу и выполняется запрос, даже если пользователь покидает страницу или закрывает браузер. Это возможно?jQuery продолжается, даже если пользователь покинул страницу

if(localStorage.getItem("counter")){ 
    if((localStorage.getItem("counter") >= 300) || (localStorage.getItem("counter") <= 0)){ 
    var value = 300; 
    }else{ 
    var value = localStorage.getItem("counter"); 
    } 
}else{ 
    var value = 300; 
} 
document.getElementById('divCounter').innerHTML = value; 

var counter = function(){ 
    if(value <= 0){ 
    localStorage.setItem("counter", 0); 
    value = 0; 
    $(".exit").trigger("click"); 
    }else{ 
    value = parseInt(value)-1; 
    localStorage.setItem("counter", value); 
    } 
    document.getElementById('divCounter').innerHTML = value; 
}; 

var interval = setInterval(function(){counter();}, 1000); 

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

+0

Поскольку JQuery работает в браузере, вам нужен бэкэнд-язык. – Mihai

+0

Нет, невозможно выполнить код на странице, которая не загружена. Есть некоторые вещи, которые вы * можете сделать, например, выполнить свою логику на серверном языке или, возможно, сохранить состояние страницы в локальном хранилище и проверить ее при следующем загрузке страницы пользователем и т. Д. Но вы можете 'просто произвольно выполнять код вне контекста страницы в браузере. – David

+1

Закрытие браузера или просто страницы приведет к остановке любого JS-кода. JS - клиентская сторона. Я думаю, что единственное исключение было бы для вызовов AJAX, которые вызвали некоторый запрос к службе, и поэтому служба, получающая запрос, будет продолжать работать до тех пор, пока она не будет завершена. Но в любом случае, это не будет клиентская сторона. – melancia

ответ

0

Я смею ответить на ваш вопрос и тем не менее надеюсь, что это поможет вам. Нет возможности запустить этот js-код после закрытия этой вкладки, но вы можете вспомнить время, когда пользователь покинул ваш сайт, установив time_leave, который устанавливается на каждом интервале и когда пользователь покидает ваш сайт, используя onbeforeunload :

var value; 
if (localStorage.getItem('counter')) { 
    if ((localStorage.getItem('counter') >= 300) || (localStorage.getItem('counter') <= 0)) { 
    value = 300; 
    } else { 
    value = getElaspedTime(); 
    } 
} else { 
    value = 300; 
} 

document.getElementById('divCounter').innerHTML = value; 

var counter = function() { 
    if (value <= 0) { 
    localStorage.setItem('counter', 0); 
    value = 0; 
    //$('.exit').trigger('click'); 
    } else { 
    value = parseInt(value) - 1; 
    localStorage.setItem('counter', value); 
    } 
    document.getElementById('divCounter').innerHTML = value; 
    // set "departure"-time 
    localStorage.setItem('time_leave', (new Date()).getTime()); 
}; 

function getElaspedTime() { 
    var now = new Date(); 
    var timeLeft = + localStorage.getItem('time_leave'); 
    timeLeft = new Date(timeLeft); 
    var passedSecs = (now.getTime() - timeLeft.getTime())/1000; 
    return parseInt(localStorage.getItem('counter')) - parseInt(passedSecs); 
} 

window.onbeforeunload = function(){ 
    // set "departure"-time when user closes the tap 
    localStorage.setItem('time_leave', (new Date()).getTime()); 
}; 

var interval = setInterval(function() { 
    counter(); 
}, 1000); 
+0

спасибо. это решило проблему. но есть ли способ не запускать window.onbeforeunload, когда страница обновляется. просто запустите его, когда страница закрыта. – reza

+0

Добро пожаловать! Извините, я только что нашел onbeforeunload и выгрузился. – Blauharley

+0

И спасибо вам, потому что он даже не был закончен (день был слишком длинным, кажется). Мой ответ был обновлен. – Blauharley