2017-04-27 114 views
1

重要:即使這可能可以用php(我在Wordpress上使用WooCommerce)完成,但我希望此腳本僅在我的瀏覽器上運行。這就是爲什麼我想用Javascript來做到這一點。因此,我使用Custom Javascript for Websites從我的瀏覽器加載我的腳本。Javascript - 如何在頁面刷新後才運行部分代碼?

我的腳本應該做什麼:檢查特定元素的數據是否已更改。

邏輯:步驟1)獲取並本地記住特定類的特定字符串(訂單號)。步驟2)刷新頁面。步驟3)再次獲取特定類的特定字符串(訂單號)。步驟4)如果字符串不匹配,請運行一個功能(播放音頻)。

問題:頁面重新加載後,腳本從頭開始再次運行。因此,它導致覆蓋存儲的字符串。結果,存儲的和新提取的字符串總是相等的。

問題:如何讓腳本僅在刷新後才運行第3步,以便存儲的數據不會覆蓋自身?

當前代碼

var OrderIdOld = document.getElementsByClassName("row-title"); // Select every single element with ClassName "row-title" 
var x = (OrderIdOld[0].innerText); // Get the string of the first element of the class "row-title" 
var compareOld = x.slice(-1); // Get the last element of the string (since it will be a number, we can change the string into a number easily later) 
localStorage.setItem("compareOld", compareOld); // Store this element in local storage, so that it can be used after page reloads. 

setInterval ("window.location.reload()", 30000); // Reload page every 30 secs. 

var remembered = localStorage.getItem("compareOld"); // Assign stored element to a new var. 
var n = compareOld.valueOf(); // Turn stored element into a number (for easy comparison later). 

var OrderIdNew = document.getElementsByClassName("row-title"); // Select every single element with ClassName "row-title" 
var y = (OrderIdNew[0].innerText); // Get the string of the first element of the class "row-title" 
var compareNew = y.slice(-1); // Get the last element of the string (since it will be a number, we can change the string into a number easily later) 
var m = compareNew.valueOf(); // Turn fetched element into a number (for easy comparison later). 


function beep() { 
    var snd = new Audio("data:audio/wav;base64,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qJrx4KOQjahZxWbcZgztj2c49nKmkId44S71j0c8eV9yDK6uPRzx5X18eDvjvQ6yKo9ZSS6l//8elePK/Lf//IInrOF/FvDoADYAGBMGb7FtErm5MXMlmPAJQVgWta7Zx2go+8xJ0UiCb8LHHdftWyLJE0QIAIsI+UbXu67dZMjmgDGCGl1H+vpF4NSDckSIkk7Vd+sxEhBQMRU8j/12UIRhzSaUdQ+rQU5kGeFxm+hb1oh6pWWmv3uvmReDl0UnvtapVaIzo1jZbf/pD6ElLqSX+rUmOQNpJFa/r+sa4e/pBlAABoAAAAA3CUgShLdGIxsY7AUABPRrgCABdDuQ5GC7DqPQCgbbJUAoRSUj+NIEig0YfyWUho1VBBBA//uQZB4ABZx5zfMakeAAAAmwAAAAF5F3P0w9GtAAACfAAAAAwLhMDmAYWMgVEG1U0FIGCBgXBXAtfMH10000EEEEEECUBYln03TTTdNBDZopopYvrTTdNa325mImNg3TTPV9q3pmY0xoO6bv3r00y+IDGid/9aaaZTGMuj9mpu9Mpio1dXrr5HERTZSmqU36A3CumzN/9Robv/Xx4v9ijkSRSNLQhAWumap82WRSBUqXStV/YcS+XVLnSS+WLDroqArFkMEsAS+eWmrUzrO0oEmE40RlMZ5+ODIkAyKAGUwZ3mVKmcamcJnMW26MRPgUw6j+LkhyHGVGYjSUUKNpuJUQoOIAyDvEyG8S5yfK6dhZc0Tx1KI/gviKL6qvvFs1+bWtaz58uUNnryq6kt5RzOCkPWlVqVX2a/EEBUdU1KrXLf40GoiiFXK///qpoiDXrOgqDR38JB0bw7SoL+ZB9o1RCkQjQ2CBYZKd/+VJxZRRZlqSkKiws0WFxUyCwsKiMy7hUVFhIaCrNQsKkTIsLivwKKigsj8XYlwt/WKi2N4d//uQRCSAAjURNIHpMZBGYiaQPSYyAAABLAAAAAAAACWAAAAApUF/Mg+0aohSIRobBAsMlO//Kk4soosy1JSFRYWaLC4qZBYWFRGZdwqKiwkNBVmoWFSJkWFxX4FFRQWR+LsS4W/rFRb/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////VEFHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU291bmRib3kuZGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjAwNGh0dHA6Ly93d3cuc291bmRib3kuZGUAAAAAAAAAACU="); 
    snd.play(); 
} // Function that will play the sound. 


if (n!=m) { 
beep(); 
} // Run function if two numbers are not equal. 

附加:我已經收集了代碼的部分從計算器上的各種問題。意思是,我在過去的一週裏一直在尋找這個話題。 這是我的第一個問題。希望我對問題進行了格式化,以便於理解。

編輯:問題已解決。我使用了在第一次加載頁面時只運行第一步功能的想法。這篇文章幫助我獲得功能工作https://stackoverflow.com/a/22334768/7929506

工作代碼看起來像這樣

function beep() { 
window.open('https://www.youtube.com/watch?v=EQ3zPIj2O5k','_blank'); 
} 

if (sessionStorage.getItem("visit") == null) { 
    var OrderIdOld = document.getElementsByClassName("row-title")[0].innerText.slice(-1).valueOf(); 
    sessionStorage.setItem("OrderIdOld", OrderIdOld); 
    sessionStorage.setItem("visit", new Date()); 
    setTimeout("window.location.reload()", 10000); 
} 

else { 
    var OrderIdNew = document.getElementsByClassName("row-title")[0].innerText.slice(-1).valueOf(); 
    var x = sessionStorage.getItem("OrderIdOld"); 
    if (x==OrderIdNew) { 
     setTimeout("window.location.reload()", 10000); 
     } 
    else { 
     beep(); 
     var x = sessionStorage.getItem("OrderIdOld"); 
     sessionStorage.removeItem("OrderIdOld"); 
     sessionStorage.removeItem("visit"); 
     setTimeout("window.location.reload()", 10000); 
    } 
} 
+0

看看[localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage)。這將允許你輕鬆地保存刷新之間的數據,這可以用來定義你的狀態。 –

+0

這個問題非常廣泛。鄒可以使用cookie或HTML5網絡存儲,但我認爲,這不是一個特定的,可重現的問題。 – Clijsters

+0

@EmilS.Jørgensen我正在使用localStorage,但它在頁面刷新後被覆蓋。 – Levy

回答

0

當您刷新頁面第一次,你可以簡單地添加標記變量爲URL來標識氣象其刷新或首次加載。基於此,您可以將一個本地化變量傳遞給腳本,如果已設置,那麼您需要刷新否則不會。

+0

我用你的建議作爲代碼的主要邏輯。我更新了原始問題中的最終代碼。 – Levy

+0

太棒了!這樣做有幫助,你可以接受它,並upvote它! –

+0

我做了,但因爲我的聲望是1,所以沒有顯示。 – Levy

相關問題