从 iOS 15 开始,appCache 被禁用。所以我正在寻找替代方案。
是否有启用 WKWebView Service Workers 的官方方法?
我知道您可以添加 info.plist 键,然后通过实例化配置中启用的WKAppBoundDomainsWKWebViews 来启用它们。limitsNavigationsToAppBoundDomains = YES这将允许您将服务工作线程用于您在 WKAppBoundDomains 中指定的域。我可以依靠这个吗?我没有找到任何苹果文章提到它。
出于性能目的,我希望我的一些网页使用已缓存以供离线使用的资源(图像,CSS等),但不要将页面本身缓存,因为内容将动态生成.
一种方法是重构我的页面,以便他们通过AJAX加载动态内容或在LocalStorage中查找.细节可能会有所不同,但从广义上讲,这类似的东西.
如果可能的话,我宁愿找到一种方法来简单地指示浏览器为页面使用缓存资源(同样,图像,CSS等),但不实际缓存(动态生成的)HTML内容本身.
有没有办法用HTML5离线appcache做到这一点?我的印象是答案是"不",因为:
我错了吗?似乎可能有一些棘手(或不那么棘手)的方式.现在我已经输入了它,我想知道NETWORK在appcache清单的部分中明确地包含页面是否可以解决问题.
html5 offline-caching manifest.cache cache-manifest html5-appcache
我正在使用Chromium base的WebView 开发android 4.4应用程序.当进程杀死时,它丢失到appCache.(例如任务列表,设置 - 应用程序 - 停止)
android 4.3或更低版本没问题.
应用程序启动在线
启动WebView活动< - 获取appCache
应用程序在OffLine上启动
使用appCache启动WebView活动< - 没问题
从任务列表中杀死进程
应用程序在OffLine上启动
启动WebView活动< - 无法使用appcache.丢了appcache!
如何解决这个问题?
谢谢,
TMK
3月16日更新
我在铬中发现了以下消息.可能,AppCache已被铬清理.
[错误:cache_creator.cc(115)]无法创建缓存
[错误:appcache_storage_impl.cc(1803)]无法打开appcache diskcache.
我发现它只发生在https(SSL)上.
我正在使用Cordova(3.4)开发移动应用程序.我的核心应用程序文件嵌入在我的应用程序存档(.apk或.ipa)中,并且必须从我的服务器检索一些文件(js/html/css).因此,如果我希望我的应用程序可以脱机使用,我需要使用appcache来处理这些文件.
我appcache.manifest的一个示例:
CACHE MANIFEST
# version 7
NETWORK:
*
http://*
https://*
CACHE:
# Message module
http://my.server.ip/module/routes.json
http://my.server.ip/module/css/style.css
http://my.server.ip/module/js/controller.js
http://my.server.ip/module/js/service.js
...
Run Code Online (Sandbox Code Playgroud)
我的index.html(嵌入到我的应用中):
<!DOCTYPE html>
<html lang="en" xmlns:ng="http://angularjs.org" id="ng-app" ng-app="app"
manifest="http://my.server.ip/tmp_appcache.manifest">
...
<body>
<script>
document.addEventListener("deviceready", function(e) {
var appCache = window.applicationCache;
alert('device ready');
console.log('appCache', appCache);
// Fired after the first cache of the manifest.
appCache.addEventListener('cached', function(event) {
console.log(event);
alert('Appcache OK');
}, false);
appCache.addEventListener('UpdateReady', function(event) {
console.log(event);
alert('Appcache Reloaded');
}, false);
appCache.addEventListener('error', function(event) {
console.log(event);
alert('Appcache ERROR');
}, false);
appCache.addEventListener('checking', function(event) …Run Code Online (Sandbox Code Playgroud) 在我的应用程序离线时,我一直在使用webfonts(字体非常具体)显示问题.
所以我在清单中有我的字体
fonts/fontawesome-webfont.ttf?v4.1.0
Run Code Online (Sandbox Code Playgroud)
当应用程序首次在线加载时,ttf文件会加载并存储在appcache中并正确显示.
但是,一旦断开网络以使应用程序脱机运行,除了基于字体的图标(它们显示为方框,就像没有加载字体一样)时,一切正常
我查看了chrome的appcache(chrome:// appcache-internals),文件就在那里
Explicit, https://mysite.com/fonts/fontawesome-webfont.ttf?v4.1.0 141 kB
Run Code Online (Sandbox Code Playgroud)
我可以访问该文件,标题似乎是正确的
HTTP/1.1 200 OK
Content-Type: font/ttf
Last-Modified: Fri, 23 May 2014 07:40:31 GMT
Accept-Ranges: bytes
ETag: "cbe2e465a76cf1:0"
Server: Microsoft-IIS/8.5
X-Powered-By: ASP.NET
Date: Thu, 05 Jun 2014 08:05:57 GMT
Content-Length: 141564
Run Code Online (Sandbox Code Playgroud)
chrome中有一些可疑的东西.
Application Cache Error event: Manifest fetch failed (6) https://mysite.com/appcache.manifest
Run Code Online (Sandbox Code Playgroud)
但我认为这仅仅是因为应用程序处于脱机状态且无法获得更新的清单
第二是
Resource interpreted as Font but transferred with MIME type text/html: "https://mysite.com/fonts/fontawesome-webfont.ttf?v=4.1.0"
Run Code Online (Sandbox Code Playgroud)
这是我能看到的唯一可能是原因.
任何见解都会很棒,提前谢谢!
我的任务是让我公司的Web应用程序脱机使用.在我进入实际开发阶段之前,我想确保我目前的策略不会成为一个破产.
我首先考虑使用html5应用程序缓存,但在做了一些测试后,我发现它似乎没有缓存服务器端操作,而是渲染的实际html(如果我错了,请纠正我).这不起作用,因为渲染的html取决于当前登录的用户.从我的测试中,它总是呈现html,好像登录的最后一个人(在线)正在登录.
我目前的策略是:我只缓存登录页面和离线(.html)页面,以对应每个需要离线使用的aspx页面.每次成功登录(在线)都会导致创建或更新Web SQL数据库或IndexDB(取决于浏览器),其中包含该人员脱机操作所需的所有数据,包括将用于登录凭据的表.通过这种方式,脱机登录的唯一要求是使用您的登录凭据登录至少一次.
我担心的是我过度复杂了.为了使这项工作,我需要为每个当前页面(很多页面)创建一个html页面,我将不得不重写当前在服务器上用JavaScript完成的所有事情,包括验证,数据库调用,填充控件例如下拉列表和数据网格等.此外,我将来更改的所有内容都需要进行后续的离线更改.
对于我正在尝试做的事情,我有一个既定的最佳实践,我正在忽视,还是我冒险进入新的领域?
asp.net html5 web-applications offline-web-app html5-appcache
在我的离线webapp缓存期间,我收到一个完全有效的错误,该错误显示在浏览器控制台中,如下所示:
Application Cache Error event: Manifest changed during update, scheduling retry
Run Code Online (Sandbox Code Playgroud)
我可以添加一个监听器,以通知发生了错误.
window.applicationCache.addEventListener('error', function(e){
//handle error here
}, false);
Run Code Online (Sandbox Code Playgroud)
如何获取错误详细信息,在这种情况下" 更新期间更改了清单,调度重试 "?
我正在构建一个专门针对iPad(运行iOS 6+)的Web应用程序,显示公司的产品系列.
使用HTML5的"cache.manifest"文件完美地完成了这一切.但由于缓存已增长到大约50MB,因此iPad不再保存应用程序数据.根据Safari设置,缓存大小现在为0.1KB,而不是50MB.
那么,对于Web应用程序,Safari的缓存的实际限制是什么?是否有办法扩大应用程序缓存的最大数量?
我尝试了两种不同的方式,但都不起作用:
1.更新清单,以便浏览器看到更改和更新
这将更新除JavaScript文件之外的所有文件.浏览器看到有所不同,下载所有内容(包括JavaScript文件),但使用缓存版本的JavaScript文件.
2.发送无缓存标头(请参阅下面的代码)以停止缓存脚本文件
这会导致浏览器抛出错误而不再缓存任何内容.它说发生了ApplicationCache错误.
无缓存代码:
<filesMatch "\.(js)$">
FileETag None
<ifModule mod_headers.c>
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</ifModule>
</filesMatch>
Run Code Online (Sandbox Code Playgroud)
以上使得所有浏览器都不会缓存应用程序以供离线使用.
有没有解决的办法?