ios – 为什么SVG中的图像在以前缓存在iPad上时并不总是从应用程序缓存中加载?

ios – 为什么SVG中的图像在以前缓存在iPad上时并不总是从应用程序缓存中加载?,第1张

概述我们有一个Web应用程序,允许用户查看SVG.这些SVG通常包含使用相对URL加载的图像.由于我们希望将其作为iPad“网络应用程序”,我们还希望将其添加到iPad用户的主屏幕,并通过 HTML 5应用程序缓存进行缓存,以便用户可以离线查看这些SVG和相关图像. 当我们的应用程序从iPad主页图标加载时,将正确读取应用程序缓存清单,并缓存所有引用的资源.当用户开始脱机使用应用程序时,会出现此问题. 我们有一个Web应用程序,允许用户查看SVG.这些SVG通常包含使用相对URL加载的图像.由于我们希望将其作为iPad“网络应用程序”,我们还希望将其添加到iPad用户的主屏幕,并通过 HTML 5应用程序缓存进行缓存,以便用户可以离线查看这些SVG和相关图像.

当我们的应用程序从iPad主页图标加载时,将正确读取应用程序缓存清单,并缓存所有引用的资源.当用户开始脱机使用应用程序时,会出现此问题.在使用应用程序期间,会在页面DOM中添加和删除SVG.在此期间,SVG中的某些映像无法从应用程序缓存加载,即使它们肯定存在并缓存.相反,向服务器发出了对图像的请求,这显然是因为用户不再在线而失败.

有趣的是,当在iPad上的safari中导航到页面时,似乎不会出现此问题.它似乎特定于整页Web应用程序视图,但我无法保证.

我可以使用这个HTML页面轻松地重现这个:

<!DOCTYPE HTML><HTML manifest="testfiles.manifest"><head>    <Title>Test</Title>    <script src="JavaScript/jquery-1.7.1.Js" type="text/JavaScript"></script>    <!-- Remove the browser Chrome when the page is loaded from a homescreen icon -->    <Meta name="apple-mobile-web-app-capable" content="yes" /></head>    <body>        <h1>Simple SVG caching test</h1>        <h2>Basket ball SVG</h2>        <p>            <span ID="remove">Remove</span> | <span ID="add">Add</span>        </p>        <p>            <span ID="show">Show</span> | <span ID="hIDe">HIDe</span>        </p>        <p>            <span ID="reload">Reload</span>        </p>        <embed wIDth='360' height='510' src='Testfiles/Basketball.svg' />        <script type="text/JavaScript">            $(function ()            {                $("#remove").click(function ()                {                    $("embed").remove();                });                $("#add").click(function ()                {                    $("<embed wIDth='360' height='510' src='Testfiles/Basketball.svg' />").appendTo("body");                });                $("#show").click(function ()                {                    $("embed").show();                });                $("#hIDe").click(function ()                {                    $("embed").hIDe();                });                $("#reload").click(function ()                {                    location.reload(true);                });            })        </script>    </body></HTML>

这个SVG:

<?xml version="1.0" enCoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBliC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg   xmlns="http://www.w3.org/2000/svg"   xmlns:xlink="http://www.w3.org/1999/xlink"   wIDth="340"   height="340">  <image     wIDth="340"     height="340"     xlink:@R_301_6839@="Basketball.png"     x="0"     y="0" /></svg>

这个图像由SVG引用:

而这个清单文件:

CACHE MANIFESTCACHE:Testfiles/Basketball.svgTestfiles/Basketball.pngJavaScript/jquery-1.7.1.Js

并按照以下步骤 *** 作:

>打开safari并导航到再现HTML文件的位置(我们在windows 2008 / IIS服务器上托管它)
>使用“添加到主屏幕”按钮将页面添加到主屏幕.
>关闭safari并清理safari缓存
>从新添加的书签加载页面
>等到页面完全缓存.通常大约5-10秒,但您可以附加到某些应用程序缓存事件以注销进度.
>关闭wifi(或你使用的连接方式)
>从新添加的书签加载页面
>请注意,页面看起来正确缓存.使用添加和删除按钮.当您使用页面上的“添加”按钮添加时,您应该很快注意到. SVG中的图像资源并不总是从应用程序缓存加载,即使它已被明确缓存.

出现问题时,您应该看到类似下面的屏幕截图

我已经检查了一些显而易见的事情:

>应用程序缓存清单具有正确的mime类型
> Manifest已下载
>清单中引用的资源正确缓存

我的问题是:

>有谁知道为什么会这样?
>这个问题有没有解决方法?

我已将此记录为苹果的错误,因此我将根据我可能从中获得的任何反馈更新此问题!

谢谢!

安迪.

解决方法 只是一个小小的“抬头!”如果你正在思考这个问题,就像我一个小时前一样…:

清单文件区分大小写.

我有一个专门用于桌面,平板电脑和智能手机的网站.在AndroID(4.0.3)上,我注意到在启用HTML 5 App Cache后,我的SVG图标开始失败,就像上面的情况一样.当用户刷新页面时,它们显示为断开的链接(并且尝试从缓存中提取图标).

在错误的情况下,我在文件夹名称中写了一封信给我的SVG图标,并立即修复此问题解决了问题.

总结

以上是内存溢出为你收集整理的ios – 为什么SVG中的图像在以前缓存在iPad上时并不总是从应用程序缓存中加载?全部内容,希望文章能够帮你解决ios – 为什么SVG中的图像在以前缓存在iPad上时并不总是从应用程序缓存中加载?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1081643.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存