我在应用程序中使用的文件夹中有很多图像.当使用缓存清单时,如果我可以指定一个通配符来加载要缓存的特定目录中的所有图像或文件,则更容易维护.
例如
CACHE MANIFEST
# 2011-11-3-v0.1.8
#--------------------------------
# Pages
#--------------------------------
../index.html
../edit.html
#--------------------------------
# JavaScript
#--------------------------------
../js/jquery.js
../js/main.js
#--------------------------------
# Images
#--------------------------------
../img/*.png
Run Code Online (Sandbox Code Playgroud)
可以这样做吗?在一些浏览器中尝试过它,../img/*但它似乎不起作用.
我需要在android设备的内部或外部内存中加载和检索HTML网页.我需要的是使用web-view在android中下载和检索网页.
有许多类似于下载或保存网页的重复问题.但是没有一个答案对我有帮助.引导我!
提前致谢.
html android webview offline-caching android-external-storage
我非常需要为我的应用做离线地图,因为它主要是为泰国制作的,因为泰国通常很难连接互联网.我现在正在使用OpenStreetMap我的MKTileOverlay但是在实现它以供离线使用时遇到问题.我找到了一个教给子类的教程MKTileOverlay.所以,在我ViewController的地图上我有:
- (void)viewWillAppear:(BOOL)animated {
CLLocationCoordinate2D coord = {.latitude = 15.8700320, .longitude = 100.9925410};
MKCoordinateSpan span = {.latitudeDelta = 3, .longitudeDelta = 3};
MKCoordinateRegion region = {coord, span};
[mapView setRegion:region];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"Map";
NSString *template = @"http://tile.openstreetmap.org/{z}/{x}/{y}.png";
self.overlay = [[XXTileOverlay alloc] initWithURLTemplate:template];
self.overlay.canReplaceMapContent = YES;
[mapView addOverlay:self.overlay level:MKOverlayLevelAboveLabels];
}
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id)overlay {
return [[MKTileOverlayRenderer alloc] initWithTileOverlay:overlay];
}
Run Code Online (Sandbox Code Playgroud)
在我的子类中MKTileOverlay,我有:
- (NSURL *)URLForTilePath:(MKTileOverlayPath)path { …Run Code Online (Sandbox Code Playgroud) 要明确的是,Web应用程序正在缓存,并且在Mobile Safari中可以正常脱机工作.
问题是它被添加到iPhone 4s和iPad 2的主屏幕上,两者都运行iOS 6.0.1.它将无法脱机工作并且在连接到互联网时出现网络错误,即"无法打开MYWEBAPP.由于未连接到互联网,因此无法打开MYWEBAPP"
我已经调试了几个小时,似乎无法找到解决方案.我没有收到控制台中的任何错误,我正在运行Jonathan Stark的调试代码
我已经在桌面Safari,Chrome和Firefox的在线/离线开发者工具中测试了该应用.以及Safari中使用设备的Web Inspector.iPhone或iPad上的结果相同.它们将缓存Web应用程序并将在Mobile Safari中运行,但在添加到主屏幕时则不会.离线或在线都没有错误.
据我所知,我正在使用最佳实践:
添加了HTML标头: <html manifest="photo.appcache">
我还尝试使用清单文件的不同名称,包括:cache.manifest和offline.manifest,因为我读到它有所不同,但在我的测试中,只要扩展名是什么名称并不重要. manifest或.appcache,并在.htaccess文件中正确提供.
添加了正确的MIME类型: AddType text/cache-manifest appcache manifest
我也试过:AddType text/cache.manifest manifest,
AddType text/cache.manifest .manifest manifest,AddType text/cache-manifest .manifest
我不相信这有效:AddType text/cache.manifest 但我不记得了.在大多数情况下它没关系,我坚持:
AddType text/cache-manifest appcache清单
就像HTML5 Mobile Boilerplate中的内容一样.
添加:
网络:*
到appcache文件.我相信这允许下载所有内容以及使所有链接都能正常工作.
<meta name="apple-mobile-web-app-capable" content="yes">
因为我在这里阅读了解决了类似于我的问题,但我可以确认它在我的测试中不起作用.按主屏幕图标时删除此行或将内容设置为"否"将重定向到Mobile Safari而不是全屏打开.我已经把它缩小到它是iOS 6中的一个错误(我实际上使用的是iOS 6.0.1),因为我知道现在已经将数据分离为浏览器中的Web应用程序和添加到主屏幕的数据.我在这里发布这个问题,看看是否有其他开发人员遇到了同样的问题.
被ServiceWorker旨在取代应用程序缓存,或者是有意,这两个将共存?换句话说,appcache即将被弃用?
我正在使用改造2和OkHttp3从服务器请求数据.我刚刚添加了一个离线缓存代码,但它没有按预期工作.我收到错误"无法解析主机"<>":没有与主机名关联的地址."
当它试图从缓存中获取检索数据时(没有互联网连接时)会发生这种情况.下面是一段代码片段.
public static Interceptor provideCacheInterceptor() {
return new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Response response = chain.proceed(chain.request());
// re-write response header to force use of cache
CacheControl cacheControl = new CacheControl.Builder()
.maxAge(2, TimeUnit.MINUTES)
.build();
return response.newBuilder()
.header(CACHE_CONTROL, cacheControl.toString())
.build();
}
};
}
public static Interceptor provideOfflineCacheInterceptor() {
return new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
if (!hasNetwork) {
CacheControl cacheControl = new CacheControl.Builder()
.onlyIfCached()
.maxStale(7, TimeUnit.DAYS) …Run Code Online (Sandbox Code Playgroud) 我正在尝试将Angular Service Worker集成到现有项目中.如果我理解正确,有两种情况如何在Angular SW中缓存数据.可以预取或延迟更新资产数据并缓存特定的API调用和其他XHR请求.
我想要实现的是首先通过网络加载特定资产,如果请求进入超时或无法访问,它将通过缓存提供.就像freshness缓存API调用时的策略一样.但似乎没有办法为JS文件配置这种新鲜度加载机制,该文件作为Angular项目中的资源加载.我已经设置了一个测试项目示例:https://github.com/philipp-schaerer-lambdait/angular-service-worker-test
下面的示例是一个标准的Angular App,它不包含我正在使用的实际项目,但显示了我想要缓存的元素,结构如下所示:
\_ Angular root
|_ src/
|_ index.html <----------- links to excluded_asset.js
|_ app/
|_ assets/
|_ excluded_asset.js <-- this one is excluded in ngsw-config.json
|_ included_asset.js
|_ ...
Run Code Online (Sandbox Code Playgroud)
这里有相关配置:
NGSW-config.json
{
"index": "/index.html",
"assetGroups": [
{
"name": "app",
"installMode": "prefetch",
"resources": {
"files": ["/favicon.ico", "/index.html", "/*.css", "/*.js"]
}
},
{
"name": "assets",
"installMode": "lazy",
"updateMode": "prefetch",
"resources": {
"files": ["/assets/**", "!/assets/excluded_asset.js"]
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
是否有可能freshness通过使用 …
我似乎无法让iPhone或iPad上的Safari离线缓存视频.当我离线时,其他所有内容都会被缓存.视频文件显然在清单中,但我只是得到了破碎的箭头.在Safari桌面上正常工作.有线索吗?我已经尝试了对象嵌入和视频标签.
是否可以使用通用图像加载器来脱机?如果可能,如何使用它?使用配置?如何手动设置下载目录?
内存不足erroron加载巨大的图像:
我的代码:
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
.cacheOnDisc(true).cacheInMemory(true)
.imageScaleType(ImageScaleType.IN_SAMPLE_INT)
.displayer(new FadeInBitmapDisplayer(300)).build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(G.appConfigs.context)
.defaultDisplayImageOptions(defaultOptions)
.memoryCacheExtraOptions(480, 800) // default = device screen dimensions
.diskCacheExtraOptions(480, 800, null)
.memoryCache(new WeakMemoryCache())
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))
.memoryCacheSize(2 * 1024 * 1024)
.discCacheSize(300 * 1024 * 1024)
.build();
ImageLoader.getInstance().init(config);
// END - UNIVERSAL IMAGE LOADER SETUP
ImageLoader imageLoader = ImageLoader.getInstance();
DisplayImageOptions options = new DisplayImageOptions.Builder().cacheInMemory(true)
.cacheOnDisc(true).resetViewBeforeLoading(true)
.showImageForEmptyUri(R.drawable.no_pic)
.showImageOnFail(R.drawable.load_failed)
.showImageOnLoading(R.drawable.img_thumb).build();
//download and display image from url
imageLoader.displayImage(imgURL, img, options);
Run Code Online (Sandbox Code Playgroud)
怎么解决?