2017-04-27 59 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

相关问题