侦听外部JavaScript文件中的变量更改

侦听外部JavaScript文件中的变量更改,javascript,jquery,dom-events,Javascript,Jquery,Dom Events,这个电子商务平台使用了大量ajax。在后台订单部分有两种可能:订单列表页面和详细订单页面。url不会改变,如果它能告诉我在哪个页面,那就很容易了,但事实并非如此 这个平台使用ajax为变量分配一些值,通过这个值我可以在我的代码中知道我在哪一页,我能做的最好的事情就是使用setInterval()来获取这个变量的变化。我讨厌使用setInterval(),所以我正在寻找替代方法 为什么我讨厌它?想象一个客户在这个电子商务中使用我们的“帮助”,并让它整天开放setInterval()在这种情况下是令

这个电子商务平台使用了大量ajax。在后台订单部分有两种可能:订单列表页面和详细订单页面。url不会改变,如果它能告诉我在哪个页面,那就很容易了,但事实并非如此

这个平台使用ajax为变量分配一些值,通过这个值我可以在我的代码中知道我在哪一页,我能做的最好的事情就是使用
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'
    });