侦听外部JavaScript文件中的变量更改
这个电子商务平台使用了大量ajax。在后台订单部分有两种可能:订单列表页面和详细订单页面。url不会改变,如果它能告诉我在哪个页面,那就很容易了,但事实并非如此 这个平台使用ajax为变量分配一些值,通过这个值我可以在我的代码中知道我在哪一页,我能做的最好的事情就是使用侦听外部JavaScript文件中的变量更改,javascript,jquery,dom-events,Javascript,Jquery,Dom Events,这个电子商务平台使用了大量ajax。在后台订单部分有两种可能:订单列表页面和详细订单页面。url不会改变,如果它能告诉我在哪个页面,那就很容易了,但事实并非如此 这个平台使用ajax为变量分配一些值,通过这个值我可以在我的代码中知道我在哪一页,我能做的最好的事情就是使用setInterval()来获取这个变量的变化。我讨厌使用setInterval(),所以我正在寻找替代方法 为什么我讨厌它?想象一个客户在这个电子商务中使用我们的“帮助”,并让它整天开放setInterval()在这种情况下是令
setInterval()
来获取这个变量的变化。我讨厌使用setInterval()
,所以我正在寻找替代方法
为什么我讨厌它?想象一个客户在这个电子商务中使用我们的“帮助”,并让它整天开放setInterval()
在这种情况下是令人讨厌的
问题是,在平台运行的这个外部Javascript中,我没有任何控制权,所以我需要一种方法来使用某种监听器来监听这个变量
我能找到的最好的方法是这个,但我不能使用它,因为这个变量不在我的控制范围内,无法定义
这就是我所做的:
setInterval(function() {//get the variable from the source code of the platform; it changed? do stuff}, 1000);
你知道比setInterval()更好的方法吗?只是为了改进我的代码
编辑:此变量位于脚本中,而不是html元素中
编辑2:是一种比setInterval()
更好的方法,基本上是一种改进的setInterval()
,因为你可以告诉他要做多少次迭代,如果客户端整天都打开平台,这是可以的,但要使用它,我需要一些东西来检测客户端在页面上做了一些活动,我需要什么?一个监听器ooo,回到原点您可以尝试使用Vue.js框架来实现这一点。我已经用示例代码创建了。因此,Vue.js框架可以自动检查和更新变量。但是,它应该在“平台”对象中添加相应的代码。因此,它可能会起作用,也可能会破坏某些功能。无论如何,您可以尝试,因为您只需编写几行代码:-)
window.someObjectOfPlatform={
变量1:“测试”,
updateVariable1:函数(){
this.variable1=“New val”+数学随机(10);
}
};
Vue.component(“您的组件”{
模板:“{{variable1}}”,
数据:函数(){
/*所有的魔力都在这里。Vue框架自动添加
方法查看变量并更新值
*/
return window.someObjectOfPlatform
},
观察:{
//每当variable1发生更改时,此函数将运行
变量1:函数(newValue){
控制台日志(“变量1更新”);
}
}
});
var app=新的Vue({
el:“#应用程序”
});
是我们可以用来检测页面上的活动并将时间设置为setInterval()的一件事。
这不是最干净的答案,但这是一件事,我标记线程已解决,直到有人给出更好的答案。
谢谢。除了上面的setInterval答案之外,我还创建了一个名为forTheWatch.js的小库,
使用相同的方法捕获和回调javascript中常规全局变量的更改
与jquery变量兼容,无需使用对象,并且如果需要,可以直接传递多个变量的数组
如果有帮助的话…:
基本上,您只需调用函数:
watchIt(“变量towatch”、“varChangedFunctionCallback”)代码>
如果不相关,请提前道歉…对不起,我们不能在应用程序中使用Vue.js,只能使用普通Javascript。问题是我们无法访问外部Javascript的代码,我们需要根据该变量的值处理一些信息,我重复Javascript变量,而不是DOM中的元素
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'
});