Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Jquery中在后台运行代码块_Javascript_Jquery_Jquery Mobile_Cordova - Fatal编程技术网

Javascript 如何在Jquery中在后台运行代码块

Javascript 如何在Jquery中在后台运行代码块,javascript,jquery,jquery-mobile,cordova,Javascript,Jquery,Jquery Mobile,Cordova,我正在使用Jquery Mobile和PhoneGap构建一个移动应用程序。我使用的是单页模型,其中有index.html、login.html等 我已经编写了一个javascript,它总是使用setInterval()每隔5分钟联系服务器端获取新消息,并且在后台运行良好,不会干扰用户的操作 我想问一下,是否可以在全局范围内声明和运行这段代码,而不必在每个html页面中重新声明它 注意:我在jQuery Mobile中的链接中使用了rel=“external”,当用户导航到某个页面时,该链接会

我正在使用Jquery Mobile和PhoneGap构建一个移动应用程序。我使用的是单页模型,其中有index.html、login.html等

我已经编写了一个javascript,它总是使用
setInterval()
每隔5分钟联系服务器端获取新消息,并且在后台运行良好,不会干扰用户的操作

我想问一下,是否可以在全局范围内声明和运行这段代码,而不必在每个html页面中重新声明它


注意:我在jQuery Mobile中的链接中使用了
rel=“external”
,当用户导航到某个页面时,该链接会导致每个页面刷新。

我认为您主要关心的是,当加载另一个脚本时,它会覆盖上一个计时器,因此,如果距离下一次调用还有一分钟,现在有5分钟。为了克服这个障碍,你可以在你的间歇时间中加入一种逻辑,以便在一天中的特定时间跑步,例如9.00、9.05、9.10。。。通过这种方式,您应该在每次执行脚本时清除间隔并将其重置,以便下次执行代码时是根据浏览器日期时间计算的标准时间。

我想您可以使用web workers实现此目的,它们在全局上下文中独立工作,就像线程一样,它们非常高效,甚至可以执行I/O

请查看此链接,希望对您有所帮助


如果您在项目中使用
MVC
的概念,这将更加可行。尝试创建一个被其他类使用的基类。您也可以使用
jquerywidget
的概念

我认为这应该是可行的

  • 正在创建一个页面(母版页),其唯一任务是运行计时器
  • 在母版页上添加一个iframe(设置为100%可见性),并将iframe指向其他页面
  • 这将做的是,每次您的一个页面(在iframe中)回发时,母版页将保留在内存中,计时器将不会重新加载

    样本母版页面

    <html>
     <head>
      <script>
       function checkMessages() {
        // check messages here
        setInterval(...);
        }
      </script>
     </head>
     <body onload="checkMessages();">
         <iframe id="iframe1" src="subpage.aspx" width="100%" scrolling="auto" frameborder="no" marginheight="0" marginwidth="0" height="100%"></iframe>
     </body>
    </html>
    
    
    函数checkMessages(){
    //在这里查看消息
    设定间隔(…);
    }
    
    我能够使用Android后台服务来实现我想要的。我使用了一个带有PhoneGap的插件。对于那些想要使用类似技术的人,您可以在

    上获得插件的相关信息,每个文档都必须引用您运行的脚本。如果您没有将代码放在js文件中并使用
    。我似乎找不到其他解决办法了。@Michał是的,我现在也在这样做。我真正想要的是一个代码块,它可以在后台运行,而不管用户导航到哪个页面。那么,我恐怕这是使用多页面系统的唯一解决方案。每次重新加载页面时,JavaScript也是如此。当您使用
    rel=external
    导航到不同的HTML文件时,页面将完全重新加载,因此,
    setInterval()
    将重置。如果您通过Ajax加载页面(w/o
    rel=external
    setInterval()
    将继续在后台运行。是的,我需要设置rel=“external”,因为我在页面中嵌入了自定义CSS样式,并且没有完整的页面重新加载,该样式将无法实现。我想您在这里有什么想法,我将考虑这一点,我已经检查了,而且似乎每当我从一个页面移动到另一个页面,它停止执行,我以前没有在iQuery中使用iFrAME,这是可能的吗?所有的现代浏览器都支持iFrAMES(包括)…