您好,我在 iPad2 上运行最新版本的 iOS (5.0.1),但无法使 .mp4 视频缓存正常工作。
我添加了必要的侦听器来侦听 applicationCache 事件,然后在这些事件发生时写入控制台,最值得注意的是,当我的应用程序被缓存时,如下所示: https: //developer.apple.com/library/archive/documentation /iPhone/Conceptual/SafariJSDatabaseGuide/OfflineApplicationCache/OfflineApplicationCache.html
使用 iPad 上的 mobile safari 中的调试控制台,我可以看到一条消息,表明我的应用程序已成功“缓存”(万岁!)。 当我重新加载页面时,除了视频之外,一切都正常(有一个类似于当您指向不存在的视频源时的图标;带有斜杠的播放按钮)。
在我的 iPad 上检查 Safari 的“网站数据”时,可以看到完整的视频大小(和其他文件)(~28mb)。 这在桌面 Safari(离线时)、Chrome 等中可以很好地缓存。 缓存应用程序时,我收到一条消息“您是否希望允许 www.site.com 增加缓存大于 25mb”,并批准下载/缓存完成。
更疯狂的是,即使我仍然在线,我的 iPad 也指向本地文件,而且我的 iPad 似乎正在尝试拉取本地视频,并且同样的错误仍然存在。
我还:
缓存了一个更简单的版本(1个html文件1个视频),同样的问题。
一个 1mb 的视频,同样的问题,所以这不是大小问题
是不是无法在 iPad 上播放缓存的视频?我可以看到 mb,所以我知道它已被缓存,只是无法播放。
我知道我的网络应用程序的appcache工作得很好,因为我已经在Chrome上尝试过,即使在Chrome for Android上也能正常运行,但是当它从我的Android应用程序从webview加载时却没有.我有以下设置:
myWebView = (WebView) v.findViewById(R.id.webView);
WebSettings webSettings = myWebView.getSettings();
webSettings.setDomStorageEnabled(true);
webSettings.setJavaScriptEnabled(true);
webSettings.setSupportMultipleWindows(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setAppCacheMaxSize(1024*1024*16);
String appCachePath = getActivity().getApplicationContext().getCacheDir().getAbsolutePath();
webSettings.setAppCachePath(appCachePath);
webSettings.setAllowFileAccess(true);
webSettings.setAppCacheEnabled(true);
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
webSettings.setDatabaseEnabled(true);
String databasePath = "/data/data/" + getActivity().getPackageName() + "/databases/";
webSettings.setDatabasePath(databasePath);
webSettings.setGeolocationEnabled(true);
webSettings.setSaveFormData(true);
Run Code Online (Sandbox Code Playgroud)
但是在加载应用程序时,在logcat中我可以阅读以下内容
10-15 01:21:43.815:E/SQLiteLog(14278):( 1)没有这样的表:CacheGroups 10-15 01:21:43.815:D/WebKit(14278):错误:10-15 01:21:43.815 :D/WebKit(14278):应用程序缓存存储:未能执行语句"DELETE FROM CacheGroups"错误"无此表:CacheGroups"10-15 01:21:43.815:D/WebKit(14278):external/webkit/Source /WebCore/loader/appcache/ApplicationCacheStorage.cpp(558):bool WebCore :: ApplicationCacheStorage :: executeSQLCommand(const WTF :: String&)10-15 01:21:43.815:E/SQLiteLog(14278):( 1)没有这样的table:Caches 10-15 01:21:43.815:D/WebKit(14278):错误:10-15 01:21:43.815:D/WebKit(14278):应用程序缓存存储:无法执行语句"DELETE FROM Caches"错误"没有这样的表:缓存"10-15 01:21:43.815:D/WebKit(14278):external/webkit/Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp(558):bool WebCore :: ApplicationCacheStorage :: executeSQLCommand(const WTF :: String&)10-15 01:21:43.815:E/SQLiteLog(14278):( 1)没有这样的表:起源10-15 01:21:43.815:D/WebKit(14278):错误:10-15 01:21:43.815:D/WebKit(14278):应用程序缓存存储:未能执行语句"DELETE FROM Origins"错误"no such table:Origins"10-15 …
从这个问题可以看出,Spring Security 管理 Spring Boot 的缓存。从 Spring Boot文档中,它展示了如何使用以下命令设置资源缓存:
spring.resources.cache-period= # cache timeouts in headers sent to browser
Run Code Online (Sandbox Code Playgroud)
这cache-period对于 Spring Boot 的所有预定义静态位置(即/css**、/js/**、/images/**)来说非常有用,但我还生成了一个manifest.appcache用于离线下载我的静态资产的文件,并且由于上述所有 Spring Security/Boot 都会使用 manifest.appcache 发送回缓存标头
"method": "GET",
"path": "/manifest.appcache",
"response": {
"X-Application-Context": "application:local,flyway,oracle,kerberos:8080",
"Expires": "Tue, 06 Oct 2015 16:59:39 GMT",
"Cache-Control": "max-age=31556926, must-revalidate",
"status": "304"
}
Run Code Online (Sandbox Code Playgroud)
我想知道如何添加排除项manifest.appcache。无论我的标头如何,IE 和 Chrome 似乎都会对 appcache 进行“正确的操作”,但 FF 似乎在注意到 appcache 发生更改时更加特殊,并且我认为我的缓存标头将其搞砸了。
编辑:我应该从WebMvcAutoConfiguration的源代码中添加它,它显示了如何为资源设置缓存,我只是不确定如何有选择地禁用我的 1 个案例,而不会潜在地破坏 spring boot 在该文件中设置的其余内容。 …
我想要一个来自 html 字符串的 url 数组,尽管只来自以下标签:
我想要这些 url,以便我可以将它们放入 appcache 清单文件中。我使用 appcache manifest builder,但它只分析我在本地提供的静态文件。它运行良好,但它不会自动包含我在 html 中包含的外部静态 js/css 文件。
我希望能够使用 node.js 解析 html 字符串。
为什么缓存应用程序会阻止Cors请求?
我有一个例子,两个html页面完全相同,除了第二行:
index.html 链接
<!DOCTYPE html>
<html manifest="main.appcache">
Run Code Online (Sandbox Code Playgroud)
index2.html 链接
<!DOCTYPE html>
<html>
Run Code Online (Sandbox Code Playgroud)
为什么没有清单的那个工作正常,带有清单的那个只在第一次工作并且在缓存应用程序时停止工作?(按F5几次)
我测试了Firefox,Chrome和IE.
我正在开发一个离线应用程序,它也有一组.php页面.目前我已将这些php文件放在.appcache清单文件中,并且工作正常.但问题是,即使我在线,当我尝试访问php页面时,它会加载缓存版本.我更喜欢的是这样的功能,
这是我的.appcache清单文件内容
CACHE MANIFEST
#2
taskmanager.php
public/css/bootstrap.css.map
public/css/bootstrap.min.css
public/css/bootstrap-theme.css.map
public/css/bootstrap-theme.min.css
public/css/main.css
public/css/task-manager.css
public/js/app.js
public/js/taskmanager.js
public/js/offlink.js
public/js/jquery-2.1.4.js
public/js/bootstrap.min.js
NETWORK:
*
http://*
Run Code Online (Sandbox Code Playgroud)
taskmanager.php所做的是从数据库中读取任务并显示它.当我像上面一样缓存它时,它将始终显示第一次加载时的任务列表.即使我在线,它也不会调用数据库并获取新条目.而是从缓存加载.所以,我的解决方案是将它放在FALLBACK部分中,如第一个答案所述.即使我把taskmanager.php文件放在FALLBACK部分下面,如下所示,
FALLBACK
taskmanager.php static_taskmanager.php
Run Code Online (Sandbox Code Playgroud)
现在,如果我有互联网连接,taskmanager.php将运行并将显示最新任务.但是我想以这样的方式创建static_taskmanager,它将与那些最新的任务集同步.这意味着,当用户离线时,static_taskmanager.php将显示当用户在线时taskmanager.php返回的最新任务列表.但目前它作为一个完整的静态页面工作.
编辑
正如我通过搜索SO和Google所理解的,实现此目的的一种方法是使用AJAX加载动态内容.但我想知道是否可以只使用清单文件本身.
我有一个由多个组件组成的 angular2 应用程序,它在其模板中嵌入了(参数)不同的小 svg 文件。这个选择的原因是我需要与 svg 进行交互并操作 svg 文件的内部 DOM。另外我想引用一个 svg 文件,而不是在模板中的多个位置使用内联 svg,它在组件模板中更干净。
我的问题是这些 svg 文件没有被缓存在浏览器中,并且在加载包含多个组件(呈现这些 svg 文件)的页面时,我注意到在页面完成加载之前有一些小延迟。这远非最佳,如果我不能解决这个问题,我会考虑回到内联 svg。
我的目标是能够让组件模板指向一个 svg 文件,并且当这个组件第一次加载时,它不会从服务器发送,而是从浏览器缓存中检索。希望这将解决我遇到的延迟加载问题。我已经尝试在我的应用程序的根目录中定义一个 cache.manifest 文件(它定义了要缓存的不同 svgs),但是当组件加载时,服务器仍然在每次组件时发送 svgs(和 param.js)加载。!
这就是我构造一个组件模板的方式,它由 svg 符号组成,当我单击 svg 符号时,我会打开一个应包含相同符号的弹出窗口:
<div>
<!--Header-->
<div>{{ name }}</div>
<!--Actual svg symbol Object-param style-->
<div class="symbolIcon"(mouseup)="onMouseUp()" (mousedown)="onMouseDown()" >
<object type="image/svg+xml" data="app/mySymbol.svg" >
<param name='Activate' value={{activate}} />
<param name='Status' value={{status}} />
</object>
</div>
</div>
<!--Placeholder for Popup-->
<modal-popup *ngIf="loadPopup" (command)="popupCmd($event);">
<!--Symbol to be placed on Popup (same as in template above)-->
<div class="modal-startstop-symbol"> …Run Code Online (Sandbox Code Playgroud) 我正在使用移动 Safari 和“添加到主屏幕”功能开发一个 HTML5 网络应用程序,以便在 iPad2 上离线使用。我能够在桌面 Chrome 中使用 cache.manifest 文件实现离线缓存,但无法使其在 iOS 移动 Safari 中工作。
该应用程序在线时在 iPad 上运行流畅,但一旦我离线,我会收到以下错误消息:“MyApp 无法打开,因为它未连接到互联网”(在 iPad 上的“添加到主屏幕”视图中)和“Safari 无法打开页面,因为它没有连接到互联网”(在同一台 iPad 上的 safari 视图中)。
我在网上阅读了数百个故障排除/问题页面和清单教程,试图解决这个问题,但没有一个建议有效。在阅读了很多关于此功能的内容后,它应该很容易实现,但我在这里。
这是迄今为止我所做/尝试/使用但没有成功的总结。我已经使用 cache.manifest 和 manifest.appcache 变体尝试了以下所有方法,但没有成功,但为简单起见,我将只记录 cache.manifest 案例:
我正在使用本地安装在 Win10 x64 上的最新 Xampp Apache for Windows 服务器进行开发和测试
目标设备是运行 iOS 8.4 版和移动 Safari 8 版的 iPad2。我的完整用户代理字符串是:
Mozilla/5.0 (iPad; CPU OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12H143 Safari/600.1.4
Run Code Online (Sandbox Code Playgroud)在 Xampp 中,我更新了 httpd.conf 文件以包含 .manifest 的正确 MIME 类型 …
web-applications mobile-safari offline-caching ios html5-appcache
我们如何告诉支持缓存存储的浏览器忽略应用程序缓存?一些帖子提到浏览器会忽略 html5 缓存清单。但我的测试表明并非如此。
例如,如果 html 页面包含:
<html manifest="manifests/hudddle.cache">
Run Code Online (Sandbox Code Playgroud)
并且还有服务工作者代码(此处未显示),我发现这两组文件都已存储。我在 Mac OS X 上的 Chrome 63 上进行了测试。
下面是显示缓存存储的文件图像。
这是显示应用程序缓存的图像。
或者我应该在服务器端检查这个并只使用两种缓存方法中的一种吗?谢谢
我有一个用 ExtJs 编写的单页应用程序。我没有使用应用程序缓存,但是当应用程序启动时,我在 Chrome 中看到以下警告:
[弃用] 应用缓存 API 已弃用,将于 2020 年 4 月左右在 M82 中移除。有关详细信息,请参阅https://www.chromestatus.com/features/6192449487634432。
这个问题已经在 Sencha 论坛(这里和这里)上多次发布,可以追溯到几年前。唯一的回应来自一个非煎茶海报,说它“应该没问题”。不完全是您希望的答案。
有谁知道如何摆脱这个警告?考虑到我没有明确使用应用程序缓存,听起来好像 ExtJs 可能在后台用它做一些事情。这就是我所关心的。