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

时间:2017-02-10 11:14:21

标签: javascript jquery javascript-events

这个电子商务平台使用了很多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,回到原点

3 个答案:

答案 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()的时间的一件事。 不是最清楚的答案,但它是一些东西,我标记线程已经解决,直到有人给出更好的答案。 感谢。