【问题标题】:Robust auto-refresh web page强大的自动刷新网页
【发布时间】:2011-04-13 09:33:19
【问题描述】:

我有很多网页需要每分钟自动刷新一次。使用 META REFRESH 或一些 javascript 轻松完成。 (是的,整个页面都需要刷新——很多内容都在变化)。

但是,它需要尽可能健壮。如果网络服务器暂时宕机或网络中断,则无法刷新,然后会出现 404 错误等,并永久卡在错误页面上。

我能想到的唯一选择是将整个页面托管在 IFRAME 中,并在父页面上添加一些脚本来刷新框架页面。框架应该是不可见的,因此任何调整窗口大小都需要调整 IFRAME。

有没有更简单、更优雅的解决方案? (由于时间限制,也不能选择 Flash/AIR/Silverlight)。

【问题讨论】:

    标签: javascript refresh page-refresh


    【解决方案1】:

    您可以使用 Ajax 加载页面的新内容。如果您的页面是在服务器端生成的,您可以省略正文周围的 HTML,只输出它的内容。然后,您可以使用 Ajax 接收新正文并将页面的现有正文替换为 body.innerHTML = request.responseText。在 Ajax 回调中,您可以进行各种您喜欢的错误处理,甚至可以忽略任何错误并重试 Ajax 请求。

    <html>
    <head>
    <script type="text/javascript">
    function doRequest() {
        var request = new XMLHttpRequest();
        request.onreadystatechange = function() {
            if (request.readyState == 4) {
                if (request.status == 200)
                     body.innerHTML = request.responseText;
                doRequest(); // restart the request
            }
        }
        request.open("get", "", true);
        request.send(null);
    }
    </script>
    <body onload="doRequest()">
    Page content...
    </body>
    </html>
    

    【讨论】:

    • 这是一个很酷的主意。我现在正在做,除了替换 document.documentElement.innerHTML 。这样,页面可以继续正常返回带有 head 和 body 标记的页面。据我所知,它似乎在所有主要浏览器中都能正常工作。
    • 我避免了这种情况,因为如果您在标题中添加带有脚本和 css 标签的新文档,我不确定浏览器如何处理它。它可能会在您每次替换页面时重新加载文件,这可能不是您想要的。另一个想法可能是使用 response.responseXML 并从中获取 body 标签并使用 DOM 方法将其克隆到您的文档中,但我猜您的页面必须是 XHTML,否则 XML 解析可能会失败。
    • 嗯,是的,经过更多测试后,它看起来 documentElement.innerHTML 不起作用——它不能用 Chrome 加载 CSS,并且脚本不能用 Chrome 或 Firefox 运行。所以我又回来寻找一个不需要重写每一页的可靠解决方案。 Uggg,我希望 iframe 不是唯一的选择。
    • 重新加载时页面的标题是否会更改,或者如果页面的内容(正文)更新就足够了?您的页面正文是否包含 JavaScript?
    • 标题不会改变。正文确实包含javascript。在 Chrome 中,刷新 documentElement.innerHTML 后不使用 CSS。
    【解决方案2】:

    Google 对 gmail 使用 iframe 方法。谷歌的解决方案不会出错。

    【讨论】:

      【解决方案3】:

      也可以使用 JQUERY 加载方式。

      【讨论】:

        猜你喜欢
        • 2010-10-01
        • 2015-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-11
        相关资源
        最近更新 更多