2016-09-29 80 views
0

我正在爲網頁開發JavaScript。當用戶空閒一定時間時,該腳本必須創建一個彈出窗口。當彈出窗口出現時,用戶可以選擇關閉彈出窗口或將其最小化。JavaScript變量的一次初始化

在關閉彈出窗口的情況下,網站內進一步打開的頁面不應再打開彈出窗口。在最小化的情況下,它也不應該這樣做。但是,當用戶第一次在任何頁面上有一定的空閒時間時,它就會出現。

它到目前爲止的工作,即彈出窗口被創建,並且彈出窗口的關閉工作(並且它不再打開)。但它不再刷新頁面。所以存儲不起作用。而且我知道這是因爲我的變量和刷新也會重新啓動腳本,所以變量的初始化確實會重寫會話值。

所以基本上我的問題是:它是如何做的第一次初始化變量,這比刷新後進一步使用?

我的代碼如下:

var isClosed = new Boolean(false); 
var isShrinked = new Boolean(false); 
var test = "Tesst"; 
sessionStorage.setItem("session", isClosed=false); 

function close_popup() { 
    $('#' + 'box').fadeOut('slow'); 
    sessionStorage.setItem("session", isClosed=true); 
} 

(function idelor(){ 

document.onclick = document.onmousemove = document.onkeypress = function() { 
    idleCounter = 0; 
}; 

window.setInterval(function() { 
    if (sessionStorage.getItem("session").toString() == "false") { 
     if (isShrinked == false) { 
      if (++idleCounter >= IDLE_TIMEOUT) { 
       var scriptCode = document.createElement('p'); 
       scriptCode.id = 'Sentotal'; 
       document.getElementsByTagName('body')[0] 
         .appendChild(scriptCode); 
       document.getElementById("Sentotal").innerHTML = boxTotal; 
      } 
     } 
    } 
}, interval);}()); 
+1

在Cookie聽起來cookiebar行爲=>商店還是你?想把它呈現給普通的訪問者嗎?嘗試'localStorage'作爲持久性數據[不同](http://stackoverflow.com/questions/5523140/html5-local-storage-vs-session-storage)與' sessionStorage' –

+0

當我使用localStorage時,它是否會在這裏被覆蓋的方式相同?我認爲會話會存儲實際標籤的信息,甚至是Tab的F5s。 – Kaibear

+0

webStorage store st戒指。你實際看到什麼值存儲?還要了解一下session和localstorage之間的區別......你的解釋並不完全正確 – charlietfl

回答

1

可以使用的cookie這件事。

//A simple function to get the value stored in cookie; 
var getCookie = name => 
    document.cookie.split(';') 
    .map(token => token.trim('').split('=')) 
    .reduce((prev, curr) => 
    (prev[curr[0]] = curr[1]) && prev, {})[name], 
    myPopup =() => { 
    if (!getCookie('noPopUp')) { 
     console.log('your popup logic'); 
     document.cookie = 'noPopUp=true' 
    } 
    }, 
    reset =() => { 
    document.cookie = 'noPopUp=true; expires=' + new Date(); 
    }; 

reset(); //Remove this and myPopUp will do nothing until you restart your browser. 
myPopUp(); 
myPopUp(); 

Cookie在瀏覽器關閉時重置(默認)。

+0

太棒了!現在爲我工作!我附上我在問題答案中編寫的代碼。 – Kaibear

+0

非常感謝。只是一個小小的建議btw。你可以在處理程序中使用setTimeout,並在onClick函數中重置處理程序而不是setInterval。這樣,你可以跳過ifs和邏輯想被一次又一次地調用,因爲你只需要它啓動一次。 –

0

我以前使用的cookie軒範鍤嗯的建議,並具有以下,工作穩定的解決方案編碼:

只有兩個變量,現在作爲常量名的餅乾:

var CLOSE_CONSTANT = "CloseCookie"; 
var MINIMIZE_CONSTANT = "MinimizeCookie"; 

簡單的功能,如創建並得到餅乾。請注意,「錯誤」,在getCookie(...)是腳本!:初始化非常重要

​​

我也建一個cookieChecker(...)功能,這與「自動填寫錯誤餅乾(那些誰是不存在ATMO)假「:

function cookieChecker(name) { 
switch (getCookie(name)) { 
case "error": 
    setCookie(name, "false"); 
    break; 
default: 
    break; 
} 
} 

現在最終的函數,這是HTML打開的唯一函數。 cookieChecker(...)使用兩次:用於最小化和關閉彈出窗口。這兩個函數簡單地設置一個cookie的statetrue(和衰落的開箱):

(功能idelor(){

var minutes = false; 
var interval = minutes ? 60000 : 1000; 
var IDLE_TIMEOUT = 5; 
var idleCounter = 0; 

document.onclick = document.onmousemove = document.onkeypress = function() { 
    idleCounter = 0; 
}; 
cookieChecker(MINIMIZE_CONSTANT); 
cookieChecker(CLOSE_CONSTANT); 

window 
     .setInterval(
       function() { 
        switch (getCookie(CLOSE_CONSTANT) + " " 
          + getCookie(MINIMIZE_CONSTANT)) { 
        case "false false": 
         if (++idleCounter >= IDLE_TIMEOUT) { 
          var scriptCode = document.createElement('p'); 
          scriptCode.id = 'Sentotal'; 
          document.getElementsByTagName('body')[0] 
            .appendChild(scriptCode); 
          document.getElementById("Sentotal").innerHTML = BOXTOTAL; 
         } 
        default: break; 
        } 
       }, interval); 
}())