这个电子商务平台使用了很多ajax。在后台订单部分有两种可能性:订单列表页面和详细订单页面。网址没有变化,如果能告诉我在哪个网页上会很容易,但事实并非如此。
这个平台使用ajax为变量分配一些值,这个值我可以在我的代码中告诉我在哪个页面,我能做的最好是使用setInterval()来获取这个变量的变化。我讨厌使用setInterval()所以我正在研究替代方案。
为什么我讨厌它?想象一下,客户使用我们的"帮助"在这个电子商务中,让它全天开放。在这种情况下,setInterval()是可恨的。
问题在于,我没有对该平台运行的外部javascript进行任何控制,因此我需要一种方法来使用某种类型的侦听器。
我能找到的最好的是Akira's answer但是我无法使用它,因为这个变量不在我的控制之下来定义。
这就是我所做的:
setInterval(function() {//get the variable from the source code of the platform; it changed? do stuff}, 1000);
你知道比setInterval()更好的方法吗?只是为了改进我的代码。 THX
编辑:此变量位于脚本中,而不是位于html元素中
编辑2: this link有点比setInterval()更好,基本上是一个改进的setInterval(),因为你可以告诉他要做多少次迭代,这是好的客户端整天打开平台的情况,但要使用它我需要一些东西来检测客户端在页面上做了一些活动,我需要什么呢?听众soooo,回到原点
答案 0 :(得分:0)
您可以尝试使用Vue.js框架。我使用示例代码创建了jsfiddle。因此,Vue.js框架自动检查和更新变量的想法。但是,它应该在“平台”对象中添加代码。所以它可能会工作或破坏一些功能。无论如何,你可以尝试所有你需要做的就是写几行代码: - )
window.someObjectOfThePlatform = {
variable1:"Test",
updateVariable1:function(){
this.variable1 = "New val " + Math.random(10);
}
};
Vue.component('your-component', {
template:"<div>{{ variable1 }}</div>",
data:function(){
/* all magic is here. The Vue framework automaticaly add
methods to look at variables and update values
*/
return window.someObjectOfThePlatform
},
watch: {
// whenever variable1 changes, this function will run
variable1: function (newValue) {
console.log("variable1 updated");
}
}
});
var app = new Vue({
el: '#app'
});
答案 1 :(得分:0)
除了上面的setInterval答案外,我还创建了一个名为 forTheWatch.js 的微型库, 使用相同的方法来捕获和回调JavaScript中普通全局变量的更改。
与jquery变量兼容,无需使用对象,并且如果需要,可以直接传递包含多个变量的数组。
如果有帮助...:
https://bitbucket.org/esabora/forthewatch
基本上,您只需要调用函数:
watchIt("theVariableToWatch", "varChangedFunctionCallback");
抱歉,如果不相关的话...
答案 2 :(得分:-1)
SuperNovas's answer edited by alex是我们可以用来检测页面上的活动并设置setInterval()的时间的一件事。 不是最清楚的答案,但它是一些东西,我标记线程已经解决,直到有人给出更好的答案。 感谢。