【问题标题】:How do you force an iPad home screen bookmarked web app to refresh?如何强制 iPad 主屏幕书签 Web 应用程序刷新?
【发布时间】:2012-02-06 05:08:28
【问题描述】:

我遇到了一个问题,我将一个网络应用程序添加到我的 iPad 主屏幕(iOS 5.0.1 iPad 2),当我打开它时,它似乎在后台缓存一些东西,独立于 Safari。

我已从 Safari 中清除了设置中可用的所有内容(清除历史记录和清除 Cookie 和数据),当我使用 Safari 导航到 Web 应用程序时,我看到该应用程序处于当前状态。但是,如果我打开主屏幕书签,我会让应用程序处于预先更改的状态。

我已经看到很多关于使用 cache.manifest 缓存资源以供离线使用的信息,但我不确定这是否与此相关,因为我想要完全相反:不缓存任何内容。

我已经达到了甚至不测试外部资源的程度;如果我在 index.html 的 body 元素中更改了一些任意测试字符串,主屏幕书签不会显示更新后的文本。

【问题讨论】:

    标签: ipad caching homescreen


    【解决方案1】:

    另一种解决方法是将 ?v=1 添加到您的 Javascript 和 CSS 链接。例如:

    <link rel="stylesheet" type="text/css" media="all" href="./css/ipad.css?v=1">    
    <script src="./js/ipad.js?v=1"></script>
    

    据我所知,当您的文件发生更改时,似乎不必更新号码。显然,在安装了最新软件更新的 iPad 2 上,仅仅暗示一些动态就足够了。

    【讨论】:

    • 非常感谢,这结束了一上午的头痛!使用 iphone 5.1.1,似乎主屏幕 webapps 只在 html 文件更改时更新 JS,所以我也在更新版本。 (在 4.3.3 上,每次加载都会更新)。
    • @Raanan 我使用的是 iPad,我发现即使更改 HTML 文件也没有什么不同。我一遍又一遍地尝试。唯一让它刷新的是将它从我的主页上删除,然后从 safari 再次添加它。也许这个建议会有所作为,但是在我的应用服务器 (grunt-contrib-connect) 上,当我将 ?&amp;v=1 添加到末尾时,我无法正确下载文件。
    【解决方案2】:

    创建一个cache.manifest,指示它永远不要缓存主 html 页面引用的资源:

    CACHE MANIFEST
    
    # Version 1.0000
    
    NETWORK:
    *
    

    在你的index.html中使用它:

    <!DOCTYPE html>
    <html manifest="cache.manifest">
    

    现在,每当您更改该清单文件时(例如,通过增加该注释中的版本号),浏览器也会重新下载 index.html

    确保在更新缓存时重新加载您的页面:

    <script>
    function updateSite(event) {
        window.location.reload();
    }
    window.applicationCache.addEventListener('updateready', updateSite, false);
    </script>
    

    The Safari Developer Library has good documentation.

    【讨论】:

    • 我不得不打电话给window.location.reload(true) 来强制绕过缓存。没有true,它就无法工作。
    • 这非常有用!这应该是公认的答案。
    • 这可能有效,但在任何事情之前,在 ipad 看到这个新清单之前,至少必须进行一次重新加载。必须以某种方式触发重新加载,并且当 ipad 自行决定永远不从服务器加载任何内容时,简单地更改服务器端的某些内容无济于事 - 这是默认情况下的情况。
    • applicationCache 现已弃用,在 Chrome 85+ 中不起作用,请参阅 caniuse.com/#feat=offline-apps
    【解决方案3】:

    我想我找到了解决方法:

    仅当 index.html 文件更改时才会显示新版本的网站。
    (要加载的第一个文件)

    如果您离开 index.html 并且仅更改其他文件中的一些 js,则该站点不会加载新版本。

    【讨论】:

    • 有趣。因此,除非实际的 html 文件发生变化,否则它不会相信任何事情都发生了变化。感谢您的提示!
    • 不为我刷新 CSS 文件。
    • 不为我刷新 JS。
    • 只有在 index.html 确实引用了您更新的 js 脚本时才有效。
    【解决方案4】:

    对于我们的 iOS 网络剪辑应用程序,我们使用以下内容。到目前为止没有缓存问题:

    1- 我们有一个名为“manifest.appcache.php”的缓存清单文件

    <?php
        header("Cache-Control: max-age=0, no-cache, no-store, must-revalidate");
        header("Pragma: no-cache");
        header("Expires: Thu, 01 Jan 1970 00:00:01 GMT");
        header('Content-type: text/cache-manifest'); 
    ?>
    
    CACHE MANIFEST
    
    CACHE:
    # Don't cache anything
    FALLBACK:
    # Nothing
    NETWORK:
    # Request everything from server
    *
    

    2 - 在我们的 HTML 文件中:

    <!DOCTYPE html>
    <html lang="en" manifest="manifest.appcache.php">
        <head>
    ...
    

    【讨论】:

    • 我还必须将缓存 mainfest 添加到我通过 Ajax 插入的 html 部分。唯一对我有用的方法。谢谢!
    【解决方案5】:

    我正在开发一个 Angular 应用程序,但在尝试在 iPad 上对其进行测试时遇到了这个问题。通过在 url 末尾添加一个无意义的查询,我能够获得所有资产的当前版本。

    www.somesite.com?meaninglessquery

    【讨论】:

      【解决方案6】:

      如果您已打开 Safari Web Inspector 并指向您打开的 Web 应用程序,您可以强制重新加载打开的 Web 应用程序而不使用缓存。在 Web Inspector 处于活动状态时,按 SHIFT + COMMAND + R(在 Mac 上)。您可能需要再刷新一次才能触发更新的资产。

      【讨论】:

        【解决方案7】:

        我很幸运能关闭设备。 我更改了应用清​​单;但大概,你需要刷新或让浏览器去寻找它。 由于我删除了浏览器 chrome,因此没有重置按钮。我们尝试“关闭”应用程序(哈哈)并刷掉应用程序;但我认为 iOS 倾向于让事情继续运行。 关机是让它刷新的诀窍。

        也许有一些我不知道的刷新手势。也许应该在缓存的 Web 应用程序中塞入一点“检查更新”刷新按钮。

        【讨论】:

          【解决方案8】:

          最新的 Safari (v12.0.1) 开发工具在“网络”选项卡的右上角有一个“忽略资源缓存”按钮。检查一下,然后重新加载。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-04-29
            • 2011-10-04
            • 1970-01-01
            • 1970-01-01
            • 2021-06-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多