我对HTML5离线存储的(各种)术语感到有些困惑.
我认为AppCache是Web Storage的另一个名称,您可以通过Cache Manifest指定将要脱机存储的内容.有两种类型:LocalStorage(在当前会话之后持续存在)和会话存储(在当前会话之后不会持续存在).
以上就是我从W3C和维基百科中读到的内容,但Head First HTML5编程(Freeman&Robinson)深入描述了LocalStorage,然后在附录中有了Web Storage(有关Cache Manifest的信息)("我们没有覆盖的内容" ).
我理解正确吗?
我在一个站点上设置了一个应用程序缓存,不久后我意识到它的方式更加激进.我想删除它.永久性.
我已经读过,使用正确的MIMETYPE传递已更改的清单文件,完全为空,将删除缓存.编辑:见下文.莫里斯的回答是唯一一致的解决方案.
这是最快,最有效的解决方案吗?有没有更好的办法?
如果你能在你的答案之前指定你是否真的使用过这个功能,我真的很感激 - 模糊的文档和在测试期间没有显示的古怪是让我进入这种情况的原因.
你如何使用和创建一个MANIFEST文件(结构),
处理appCache事件和错误,
什么时候需要swapCache?
javascript events application-cache cache-manifest html5-appcache
我的清单文件工作正常,直到今天早上,我现在在Chrome版本36.0.1985.143 m中不断收到以下错误
Creating Application Cache with manifest https://localhost/static/app/cache.manifest dashboard:1
Application Cache Checking event dashboard:1
Application Cache Downloading event dashboard:1
Application Cache Progress event (0 of 192) https://localhost/static/app/images/ui-icons_454545_256x240.png dashboard:1
Application Cache Error event: Resource fetch failed (2) https://localhost/static/app/images/ui-icons_454545_256x240.png
Run Code Online (Sandbox Code Playgroud)
当我通过链接时,资源就在那里.但是我找不到任何能够详细说明(2)意味着什么的东西(看到-1的批次,但是(2)没有).我有一个有效的https证书,因为这是我第一次处理缓存清单时的一个陷阱,所以不要相信这是问题.
这是我的清单(它是由grunt生成的,似乎是有效的)
CACHE MANIFEST
# This manifest was generated by grunt-manifest HTML5 Cache Manifest Generator
# Time: Wed Aug 20 2014 10:37:07 GMT+0200 (W. Europe Daylight Time)
CACHE:
fonts/JohnstonITCStd-Bold.eot
fonts/JohnstonITCStd-Bold.otf
fonts/JohnstonITCStd-Bold.svg
fonts/JohnstonITCStd-Bold.ttf
fonts/JohnstonITCStd-Bold.woff
fonts/JohnstonITCStd-BoldIta.eot
fonts/JohnstonITCStd-BoldIta.otf
fonts/JohnstonITCStd-BoldIta.svg
fonts/JohnstonITCStd-BoldIta.ttf
fonts/JohnstonITCStd-BoldIta.woff
fonts/JohnstonITCStd-Light.eot
fonts/JohnstonITCStd-Light.otf
fonts/JohnstonITCStd-Light.svg
fonts/JohnstonITCStd-Light.ttf
fonts/JohnstonITCStd-Light.woff …Run Code Online (Sandbox Code Playgroud) 我正在尝试为一个非常大(约2千兆字节)的Web应用程序创建一个HTML5应用程序缓存,该应用程序将在Windows 8 Professional平板电脑和IE10内部使用.有些事情导致缓存过程失败,但我能找到的唯一调试信息是F12控制台,它只是说"AppCache致命错误".
我做了一个错误处理程序并尝试调试:
if (window.applicationCache)
{
var oAppCache = window.applicationCache;
oAppCache.onerror = function(e) {
alert(e); // Outputs [object Event], I use this row as a breakpoint target
};
}
Run Code Online (Sandbox Code Playgroud)
但是,e使用调试器查看时,不包含任何有用的信息.
根据Web服务器日志,错误之前请求的最后一个文件是JPEG,就像许多其他文件一样.我应该从哪里开始寻找导致错误的原因的线索?该页面缓存在Firefox上很好.
我想弄清楚哪些是在android webview上启用appcache的正确设置.我发现了很多关于这个的讨论,但没有一个有效.
鉴于AppCache设置正确(它适用于chrome),我在webview上的错误设置如下:
mWebView = (WebView) findViewById(R.id.activity_main_webview);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDatabaseEnabled(true);
webSettings.setDomStorageEnabled(true);
webSettings.setAllowFileAccess(true);
webSettings.setAppCachePath("/data/data/"+ getPackageName() +"/cache");
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
webSettings.setAppCacheEnabled(true);
webSettings.setSupportMultipleWindows(true);
mWebView.setVerticalScrollBarEnabled(false);
mWebView.loadUrl("http://www.myapp.com");
Run Code Online (Sandbox Code Playgroud)
知道为什么它不起作用的任何想法?
这基本上与这个尚未回答的SO问题完全相同:离线Web应用程序不在Firefox上缓存,但在Chrome上可以
我遇到了同样的问题,我将提供更多信息,因为它可能有助于某人试图找出试图实现缓存清单的神秘奥秘和陷阱.
问题:点击页面重新加载/刷新,页面应该从脱机缓存重新加载,但事实并非如此.
它在Chrome 23中工作正常:当我从互联网断开连接并刷新页面时,它加载正常,控制台显示Application Cache NoUpdate事件.
但是,Firefox 15.0.1向我展示了我的404页面.
故障排除(Firefox):转到Firebug并单击DOM,然后单击applicationCache.状态显示0,表示未缓存(页面尚未脱机存储).
故障排除(Firefox):转到Firefox选项 - >高级,查看脱机Web内容和用户数据.它显示我的域使用1.4MB数据供离线使用.(这是检查您的页面是否已被缓存的好地方).
故障排除(Firefox):打开一个新选项卡,然后转到about:cache.在这里,您应该看到脱机缓存设备的标题.在这里,您可以看到缓存目录,它是保存脱机缓存文件的位置.如果单击列表缓存条目,您将在脱机缓存清单中看到这些文件.
这里有两件事我觉得很奇怪:1)当我点击列表中的任何文件时,它会转到一个空白页面,上面写着"缓存条目信息您选择的缓存条目不可用".但是,文件确实存在并且在缓存目录中不是空白2)尽管列出了缓存清单中的所有文件,但我在此处未列出我正在呼叫的页面(在Chrome DevTools中,它在清单中显示为主:即使它未在缓存清单文件中明确列出,它也会自动缓存.
这是我在线时看到的内容:使用冷(空)缓存,当我加载页面时,控制台会显示检查,下载,进度和缓存事件,但缓存状态未缓存.基本上,下载缓存文件,但无法访问它们.Firebug DOM applicationCache说:离线缓存中的0项(这与about:cache和Options - > Advanced中显示的内容相矛盾).状态为1,表示空闲.当我在线查看Firebug中的Net选项卡时,它会显示对200 OK响应的页面的GET请求.Expires设置显示1969年12月31日星期三,我认为这意味着将始终提取页面.其他文件显示304 Not Modified响应,这意味着它们是从浏览器缓存加载的,而不是脱机缓存(Chrome对这些文件的类似响应是200 OK(来自缓存),这意味着它们是从离线加载的缓存,而不是浏览器缓存).
当我离线时:使用"未缓存"缓存,GET请求失败,并加载具有200 OK(BFCache)响应的脱机回退404页面.
似乎已下载脱机缓存,因为它实际存在于磁盘上,并且控制台中显示了进度事件,但Firefox从未触发缓存事件,因此某些资源未成功下载.这些文件都是png,js或php格式,所以没有疯狂的文件格式.Chrome会将完全相同的文件下载到缓存中而不会出现问题.我也尝试过移动版Safari,它成功地从离线缓存重新加载页面.
Firefox没有缓存某些文件类型是否存在任何已知问题?我在我的一些文件上使用.html.php扩展名.我还使用php文件动态生成清单,因此它只获取存在的文件,并将它们哈希以检测更改并更新清单.
后续步骤:我将尝试一个简单的清单,看看我是否能让它工作,然后逐个添加文件,看看哪个文件触发了错误.也许Firefox不喜欢我动态生成缓存清单而不是手动更新静态文件的事实?
我已经了解了很多关于缓存清单的神秘错综复杂的知识,但我更像是一个黑客而不是计算机专家.还有其他人在使用Firefox时遇到过这种怪癖吗?
页面的开头:
<!DOCTYPE html>
<html manifest="/directory/manifest.php">
Run Code Online (Sandbox Code Playgroud)
然后manifest.php就是
header('Content-Type: text/cache-manifest');
echo "CACHE MANIFEST\n";
Run Code Online (Sandbox Code Playgroud)
它使用RecursiveDirectoryIterator来获取目录中的所有文件(默认情况下包含的缓存本身除外).
firefox offline application-cache offline-caching html5-appcache
我试图mp4在本地应用缓存中存储一个视频文件(相当小~2.5MB).
清单看起来像:
CACHE MANIFEST
viddy.mp4
Run Code Online (Sandbox Code Playgroud)
Chrome(22.0.1229.94米)将在控制台中记录以下内容:
Creating Application Cache with manifest http://example.net/cache.manifest
Application Cache Checking event
Application Cache Downloading event
Application Cache Progress event (0 of 1) http://example.net/viddy.mp4
Application Cache Error event: Resource fetch failed (-1) http://example.net/viddy.mp4
Run Code Online (Sandbox Code Playgroud)
当我点击错误旁边的链接时,它打开文件很好.
我的清单以正确的MIME类型提供(我正在使用HTML5 Boilerplate .htaccess-file)并且提供了视频Content-Type:video/mp4
我的档案太大了吗?我完全能够以这种方式缓存1MB图像,所以我认为文件大小应该不是问题?台式机和iPad上的Safari确实可以很好地缓存视频.
备注:我已经看到了这个问题,但它没有涵盖我的问题,因为解决方案似乎与Python有关.
我的应用程序目前正在使用HTML5 appcache.
我想从update()事件中获取文件的哈希值.但是,我似乎无法找到如何访问我下载的资源.
我想做点什么
$.get( "/sunflowers.png", function( data ) {
hash(data)
});
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过chrome-internals查看缓存的资源,但我希望自动化这个过程
PS:镀铬开关的凹凸!请指教.
firefox google-chrome application-cache chromium html5-appcache
从 iOS 15 开始,appCache 被禁用。所以我正在寻找替代方案。
是否有启用 WKWebView Service Workers 的官方方法?
我知道您可以添加 info.plist 键,然后通过实例化配置中启用的WKAppBoundDomainsWKWebViews 来启用它们。limitsNavigationsToAppBoundDomains = YES这将允许您将服务工作线程用于您在 WKAppBoundDomains 中指定的域。我可以依靠这个吗?我没有找到任何苹果文章提到它。
html5-appcache ×10
html5 ×3
firefox ×2
android ×1
chromium ×1
debugging ×1
events ×1
javascript ×1
offline ×1
video ×1
web-storage ×1
webview ×1
wkwebview ×1