我正在开发一个可以在离线模式下使用移动Safari的网站.我可以将它标记到主屏幕并从那里加载它.但是,一旦从主屏幕打开,点击某些链接将跳出应用程序并在移动游猎中打开 - 尽管我在所有链接点击上阻止了默认()!
该应用程序绑定该<body>级别的onclick事件处理程序.使用事件委派,它捕获任何链接上的任何点击,查看其href(例如'help'或'review'),并动态调用javascript模板并更新页面.事件处理程序在事件对象上调用preventDefault() - 对于某些可用的链接,并使用模板输出更新页面.但是,对于在输出模板结果之前导致对本地数据库命中的链接,链接将在移动safari中打开.
在桌面游侠中,即使我处于离线状态,所有链接都可以正常工作 - 某些特定的移动游猎正在发生.
有关为什么某些链接可以脱机工作而不是其他链接的任何想法?清单文件中没有列出所讨论的链接URL,但由于阻止了链接操作,因此它们不应该(不应该).
还有一些奇怪之处:*一旦我点击一个加载在移动版Safari中的链接,即使我离线,这些相同的链接现在也可以工作,并且填充了数据库中的数据的模板可以正常工作.换句话说:从主屏幕打开时链接失败,但不是从移动safari离线内部失败*更改链接以删除数据库命中(用模拟数据库结果填充模板)解决问题,并且可以单击链接在主屏幕的应用程序中.
safari offline web-applications offline-mode offline-caching
我一直在我的网站上使用HTML5离线缓存一段时间,出于某些原因我正在考虑将其关闭.令我惊讶的是它不起作用.
这就是我实现HTML5离线缓存的方法.
在我的index.html我给清单文件的路径
<html manifest="app.manifest">
Run Code Online (Sandbox Code Playgroud)
在app.manifest文件中,我列出了我希望由浏览器缓存以供离线使用的所有js/css/png文件.每次部署更新时,我都会更新app.manifest文件,这会导致浏览器获取清单文件中列出的所有文件的最新版本.
为了关闭离线缓存,我将index.html的开始标记更改为
<html>
Run Code Online (Sandbox Code Playgroud)
我对app.manifest文件进行了虚拟更改,以便浏览器(已经缓存我的网站)将检测到更改并下载所有文件的最新版本(包括index.html).
我注意到的是,浏览器确实获得了所有文件的最新版本.我<html>在没有manifest声明的更新版本中看到了新标记,但是浏览器对将来更改的行为不会改变.即我现在希望浏览器在服务器上更改时立即获取新版本的index.html文件.然而,这不会发生.在我对清单文件进行任何更改之前,浏览器不会下载更新的index.html.
因此,在我看来,浏览器已将app.manifest文件永久地与我的网站URL相关联,即使我没有在<html>标签中提及它也不会将其删除.
我已经在Google Chrome和Firefox上测试了这个,结果相同.我也尝试重新启动Chrome,但它不会忘记我的网站曾为其定义了app.manifest.我还没有在网上找到关于离线缓存这方面的任何讨论.
更新:我设法通过清除所有浏览数据(通过转到设置)摆脱Chrome中的行为.但这不是我可以告诉用户做的事情.
我正在开发一个管理大量图像,存储和调整大小的Web应用程序.
图像的请求类似于:domain:port/image_id/size
服务器获取image_id,如果还没有这样大小的图像,则创建它并将其存储在文件系统上.
所以一切正常,服务器正在运行,但我需要在浏览器中缓存这些图像至少一天,以减少服务器带宽消耗.
我做了几次测试,但似乎没有任何效果.
这是我用来制作响应头的代码:
response.writeHead(304, {
"Pragma": "public",
"Cache-Control": "max-age=86400",
"Expires": new Date(Date.now() + 86400000).toUTCString(),
"Content-Type": contentType});
response.write(data);
response.end();
Run Code Online (Sandbox Code Playgroud)
我也尝试了响应状态200. contentType总是像mime类型,如"image/jpg"或"image/png"数据是图像的字节缓冲区.
有什么建议?非常感谢.
健康长寿·繁荣昌盛,
d.
我正在重新制作我之前制作的应用程序,也可以离线工作.当页面加载时,cache.manifest找到它并正确地缓存所有页面.但是,当我在未连接时刷新页面时,我收到了大量错误.
其中一个错误是Manifest fetch failed (6),根据这个答案意味着a NETWORK_ERROR.显然我没有连接到互联网,但显然这是让网站脱机的关键,对吧?所有其他错误都来自我使用的一些文件net::ERR_INTERNET_DISCONNECTED,但是这些文件也在其中cache.manifest,所以对我来说真的没有意义.
我也没有完全空白的页面.检查我的页面确实显示我的索引页面,但似乎其他人没有正确加载.
查看chrome://appcache-internals/它还可以正确显示缓存中的所有文件.
这就是我的cache.manifest样子:
CACHE MANIFEST
CACHE:
images/aRandomImage.jpg
bower_components/polymer/polymer.html
bower_components/polymer/polymer.js
bower_components/polymer/layout.html
#etc
Run Code Online (Sandbox Code Playgroud)
可能还值得注意的是我正在使用Polymer 0.5.我还尝试关闭Chrome在后台运行并删除缓存文件夹,但无济于事.我错过了什么?
我正在开发一款支持Android Chrome和iOS Safari中"添加到主屏幕"功能的应用.由于我希望对这两个功能都提供通用脱机支持,但我只想使用我必须的清单文件,以便增加我的控制权.但是,iOS Safari不支持服务工作者,所以我的问题是如果不存在对Service Workers的支持,我怎么才能实例化缓存清单文件,更具体地说; 我知道我可以添加manifest='whatever.appcache'到<html>用JavaScript代码,而是将浏览器,例如iOS的Safari浏览器,使用缓存?
html5 offline-caching cache-manifest service-worker browser-feature-detection
我正在使用版本1.0.1中的firebase_database插件,目前正在Android上进行测试。
我单身访问数据库。
GlobalFBInstance._internal() {
final firebaseInstance = FirebaseDatabase.instance;
firebaseInstance.goOnline();
firebaseInstance.setPersistenceEnabled(true);
firebaseInstance.setPersistenceCacheSizeBytes(10000000);
databaseRef = firebaseInstance.reference();
databaseRef.keepSynced(true);
storageRef = FirebaseStorage.instance.ref();
}
Run Code Online (Sandbox Code Playgroud)
每次重新启动应用程序后,该应用程序都需要Internet才能获取数据库。我以为持之以恒并保持同步,不需要互联网吗?如果我的连接非常不好(在仿真器和设备上进行了测试),那么从数据库中加载包含四个简单字符串的gridview会花费很多时间。
当我使用以下命令加载数据快照时:
Future<DataSnapshot> getDatabaseSnap(String location) async {
var _newref = databaseRef.child(location);
await _newref.keepSynced(true);
return await _newref.once();
}
Run Code Online (Sandbox Code Playgroud)
如果互联网连接速度慢,它将不会加载。
这可能是什么原因?有没有更好的方法来确保数据库每次都不需要连接?
提前致谢。
编辑:等待持久性时,我得到错误:
bool ispersistant = await firebaseInstance.setPersistenceEnabled(true);
Run Code Online (Sandbox Code Playgroud) persistence offline-caching dart firebase-realtime-database flutter
要实现的目标:我需要像 Netflix 一样支持 android 设备上的离线视频,并使用 DRM 支持禁止其分发。
到目前为止我所做的:我使用 Shaka Packager 将示例视频转换为 m3u8 格式。使用此链接https://google.github.io/shakapackager/html/tutorials/widevine.html
面临的问题: 1. 这是否足以进行 DRM 保护?2. 我知道我必须使用许可的 Widevine 服务器,但我无法在任何地方找到有关如何获取的信息。请帮我解决这个问题。3. 我想对于第 2 点,我必须在服务器上存储一个密钥。android 设备上将使用相同的密钥来启用视频播放器。我对如何设置这个有点困惑。
提前致谢!!
我是HTML5的新手,非常抱歉,如果我的问题听起来很愚蠢.我想了解HTML5离线容量.AIM是开发的应用程序将数据保存在本地数据库(浏览器)中,当应用程序在线时,更改将被发送到服务器进行同步,类似地,本地数据库将定期与远程数据库同步,或者服务器将更改推送到客户端.我正在阅读HTML5网络数据库,但我发现它已被弃用.还有一个支持称为IndexDB.请任何人告诉我完成这项任务我应该关注哪一项?到目前为止HTML5是否可行?
看来,火力地堡的iOS实现不支持客户端模式的离线缓存.这在实践中意味着什么:
这里的问题是,如果您使用Firebase实现,例如消息传递应用程序,您很可能希望在与后端服务器的实际连接之前向用户显示消息线程和消息的先前缓存版本成立.
我假设正确的实现需要处理:
有没有人想出一个解决方案(自己的或第三方)来实现2)和3)?
在Appstore上开发了一个具有多个版本的大型应用程序.我使用AfNetworking作为网络框架.到目前为止,所有内容都在线,就像我进行异步API调用并加载数据并在互联网不可用时显示错误.
现在我们计划将整个应用程序转为支持离线缓存模式.
我试图避免样板和许多不必要的代码,并寻找任何可以处理非常复杂的应用程序的库.我几乎完成了RestKit,因为我准备了几个样本,它似乎正在同步.
由于我必须删除大量的AFNetworking代码,API调用和解析以替换RestKit,因此我无法仅使用样本来说服自己100%.
我需要建议我的方法是否正确并牢记RestKit的优缺点我是否应该能够使用RestKit实现完整的离线同步应用程序?
要么
我应该继续使用AFNetworking代码并从头开始构建一些东西.如果您更喜欢这种方法,那么您是否有一些建议如何开始?
offline-caching ×10
html5 ×3
ios ×2
offline ×2
offline-mode ×2
afnetworking ×1
android ×1
caching ×1
core-data ×1
dart ×1
drm ×1
exoplayer ×1
firebase ×1
flutter ×1
http-caching ×1
node.js ×1
persistence ×1
response ×1
restkit ×1
safari ×1
widevine ×1