svg - 如何在离线 Progressive Web App 中与 SVG 资源交互?
问题描述
我正在使用 VueJs 和最新的 Google 工作箱开发 PWA。正如您在此处看到的,服务工作者完成了它的工作并缓存了我的应用程序中使用的 SVG 文件。LightHouse 给了我 PWA 部分的满分,我可以在线安装和使用该应用程序。
但是,当我离线时,使用 SVG 资产的部件不起作用并显示回退消息,即此代码不会加载资产并显示您的浏览器不支持 SVG:
<object
data="static/svg/Khmer_unicode_NiDA_layout.svg"
type="image/svg+xml"
id="keyboard-vk">Your browser doesn't support SVG</object>
它不适用于 Google 和 Firefox。如果读得好W3C,那是因为获取算法使用 OBJECT 和 EMBED 标签的网络来加载资产,无论它是否在同一个来源(出于安全考虑?)。
我的替代方案是什么,因为我们无法使用 IMG 标签与 SVG 对象进行交互。
解决方案
经过多次测试和一些搜索,我确实确认在渐进式 Web 应用程序中必须避免使用带有属性的标签object
。因为,出于模糊的原因,规范说(尽管它不是规范的)浏览器应该尝试通过网络下载资产,而不是先尝试获取缓存。即使资产位于同一位置。然后,如果您处于离线状态,则该应用程序将无法运行。embed
src
如果您想与 SVG 元素交互,最好的办法是内联 SVG 内容(即复制/粘贴或包含到 HTML 页面中)。
推荐阅读
- mysql - 从表复制到另一个没有特定值的表
- html - 如何更改我的 css 以使超链接可见[使用最少的示例代码]?
- maven - Azure DevOps 中构建失败的 Maven 阶段。使用自托管代理构建示例 java 但得到“未处理:EPERM:不允许操作”
- java - 如何将变量值从一个 xhtml 传递到另一个 xhtml,然后传递到第二个 xhtml 的支持 ManagedBean
- php - 在 WordPress 主题中使用 php 类的问题
- python - 如何获取网站上的所有内容
- tableau-api - Tableau:如何从 Oracle 数据库外部连接两个表?
- docker - yaws 因 httpc 崩溃:请求 docker 容器提供的 URL
- android - 如何从firebase中对对象进行排序?
- c# - 尝试运行迁移时出错(如何解决无法加载文件或程序集)