强制重新加载现有客户端网页 - 仅使用JSON(无eval)

时间:2013-11-29 14:47:25

标签: javascript jquery json google-chrome

我是一名网络应用程序的顾问,基本上是一个单页面应用程序。它所做的一切就是不断在幕后检索新的json数据(比如每分钟一次),然后在屏幕上显示它。

我们的客户加载此应用程序,并使其全天候运行,持续数周。如果在检索新的json数据时发生错误,应用程序会忽略它并继续运行。

我们正在推出更新,并希望现有客户端无效,或者在没有任何用户交互的情况下重新加载。这个功能并没有被任何人“内置”,我们试图在事后这样做。

有没有办法让现有客户重新加载而不告诉我们的最终用户只是重新加载页面?

以下条件更多地定义了应用程序:

  • 该应用使用jQuery 1.9.0
  • 仅在Chrome中运行
  • 使用jquery
  • 频繁检索新的json数据
  • 丢弃它在json响应中发现的任何错误并使用旧数据。

修改

我已经建议我们可以尝试以下方法:

  • 通过JSON响应将无效数据发送到崩溃chrome(例如500 megs数据)
  • 通过JSON响应发送window.location.reload(由于jquery防止这种类型的事情,它应该不会起作用)
  • 在JSON响应中发送“script”数据,如果它在某个时刻获得$ .html(....),那么它也可以运行该脚本。

并向任何建议开放,以便重新加载或终止Chrome,因此客户端被迫重新加载页面。

3 个答案:

答案 0 :(得分:2)

如果您使用$ .ajax来请求您的数据,而不是专门设置您的内容类型,那么您可以在服务器上执行以下操作:

  • 将内容类型标题设置为“text / javascript”
  • 使用javascript回复,例如window.location =“http://www.yoursite.com

jQuery可以评估它,只需运行你的javascript。

答案 1 :(得分:1)

不可能。据我所知,你不要从JSON响应中执行代码(这是一件非常好的事情)。因此,您无法改变当前客户的行为。根据你自己的说法:

  

“丢弃它在JSON响应中发现的任何错误并使用旧数据”

您将无法通过发送无效的JSON数据来破坏用户的浏览器,因为错误将被抑制。

您可以通过发送应用程序版本号并测试更改或使用WebSockets构建自动部署到未来版本(无论如何应用程序似乎更适合,因为您可以确保客户端仅轮询服务器当JSON实际发生了变化时。)

答案 2 :(得分:0)

如果我正确使用它,请创建一个版本参考页面,并让客户端检查此页面几秒钟,当您更新文件时,客户端将使用此脚本重新加载。

var buildNo = "1.2.0.1";//

var cV = setInterval(checkVersion,(5*1000))//Every 5 sec.

function checkVersion(){

    $.ajax({
        url:"checkVersion.php?v="+buildNo,
        dataType:"JSON",
        success:function(d){
            if(d.version != buildNo){//if version is different
                window.location.reload();
                //chrome.runtime.reload(); //for chrome extensions
            }
        }
    })
}

如果您无法添加额外页面,则可以在JSON数据的末尾添加额外的变量。