我正在使用角度2懒惰路由.客户端使用AOT和angular-router-loader捆绑webpack2到延迟加载子级.当浏览器连接时,一切都按预期工作,即我可以成功地将路由器导航到延迟加载的模块,块成功加载,我可以查看组件等.
但是,如果我模拟断开连接(例如,通过使用脱机chrome开发人员工具选项)路由失败,正如预期的那样,因为它无法加载相关的块.错误是'加载块[块号]失败'
之后没有路由命令工作,就像路由器坏了.
我试图使用全局ErrorHandler处理错误.我的想法是,也许我可以在它破坏路由器之前捕获错误,但似乎到时候已经太晚了.当我发现错误时,路由器无法正常工作.
import { Injectable, ErrorHandler, Injector } from '@angular/core';
import { Router } from '@angular/router';
@Injectable()
export class CustomErrorHandler extends ErrorHandler {
constructor(private injector: Injector) {
super(false);
}
private get router(): Router {
return this.injector.get(Router, null);
}
public handleError(error: Error) {
if (/Loading chunk [\d]+ failed/.test(error.message)) {
console.info('Offline mode');
let router = this.router;
if (router) {
router.navigateByUrl('/offline').then(t => console.debug(t+'')).catch(t=> console.debug(t));
} else {
window.location.href = '/';
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
自定义错误处理程序有效,因为打印了"脱机模式"消息.注入也有效,路由器不为空,但是路由器导航不起作用,路由器承诺未解决也没有被拒绝.
我想要完成的是处理错误(例如向用户显示信息性消息)并同时使路由器处于工作状态,以便用户可以稍后导航(当恢复互联网连接时)没有重新加载整个页面.
为了查看这是否是一个角度路由器问题,我试图看看当尝试使用jit编译脱机工作时会发生什么.我使用:angular router plunker …
我知道在Chrome中您可以通过输入此地址来清除离线应用
铬://应用程序缓存,内部/
safari 5.0+有类似的东西吗?
请注意,CTRL + ALT + E不会从缓存中删除脱机Web应用程序.
我正在开发一个Web应用程序,它的行为非常类似于iOS和Android的本机应用程序.然而,Javascript文件(jQuery +我自己的)和css文件一起用于移动使用,如果用户没有启用3G,这会使应用程序加载缓慢.
因此我开始考虑离线存储这些文件.然而,除了cache.manifest(据我所知,只有当没有互联网连接启用离线使用时才开始),我找不到这个.理想情况下,我想检查文件是否已经缓存/存储,如果没有,请使用它们,然后再存储它们.
这可能吗?这将减少加载我的应用程序的时间,因为索引文件本身非常小.我仍在努力通过优化减少文件,但在此期间这将有很大帮助.
只是为了提供更多的细节,对不起我以前不清楚.
我已经开始使用HTML5样板构建这个webapp,我的.htaccess文件包含所有JS和CSS文件头,有效期为1年.
但似乎从iOS主屏幕打开应用程序每次都会加载.js和.css文件,就像它们没有被缓存一样.在桌面或甚至iOS Safari Web浏览器上打开网站似乎确实以正确的方式缓存文件,因为Javascript和CSS中的更改仅在手动刷新页面后显示.
看起来打开和关闭以及从主屏幕打开网络应用程序充当刷新,因此每次加载文件,即使它们是通过cache.manifest存储以供离线使用,文件的到期日期是远远落后于未来.
以为我会包含文件的缓存标头.这些似乎没问题.
Cache-Control max-age = 31536000,public
Expires Fri,2012年5月18日17:34:20 GMT
Vary Accept-Encoding,User-Agent
Content-Encoding gzip Keep-Alive timeout = 2,max = 98
网站用于三星Galaxy Tab与Gingerbread OS.到目前为止使用的浏览器是Stock浏览器以及Dolphin HD.当用户进出网络覆盖时,本地存储中的项目似乎随机消失.存储似乎也无法完全避免浏览器崩溃或设备重启.奇怪的部分是存储通常不会完全清除,只是大量的项目丢失.有人听说过这个问题还是有什么建议吗?
编辑:通过本地存储我的意思是,
localStorage["Key"] = value;
Run Code Online (Sandbox Code Playgroud)
使用以下方法重复:
localStorage.getItem("Key");
Run Code Online (Sandbox Code Playgroud)
在每种情况下,直接在添加到本地存储后,该站点都能够检索和使用该数据.但是,通常在漫游或浏览器/平板电脑崩溃之后的某个时间,数据不再存在.我发现的一切都说本地存储应该存在,所以我真的不知道从哪里开始.
我在我这边使用OpenStreetMap,但它通过他们的页面工作.我想知道是否有可能下载一些地图并使用本地服务器.到目前为止,我发现了类似的内容:http: //openlayers.org/dev/examples/offline-storage.html
http://openlayers.org/dev/examples/offline-storage.js
但这里使用的是缓存.
我们正在尝试将WKWebView的内容(HTML)保存在永久存储(NSUserDefaults,CoreData或磁盘文件)中.用户在没有互联网连接的情况下重新进入应用程序时可以看到相同的内容.WKWebView不像UIWebView那样使用NSURLProtocol(参见此处的帖子).
虽然我看过帖子"WKWebView中没有启用离线应用程序缓存".(Apple dev论坛),我知道存在一个解决方案.
我已经了解了两种可能性,但我无法使它们起作用:
1)如果我在Safari for Mac中打开一个网站并选择文件>>另存为,它将在下图中显示以下选项.对于Mac应用程序存在[[[webView mainFrame] dataSource] webArchive],但在UIWebView或WKWebView上没有这样的API.但是如果我在WKWebView上的Xcode中加载.webarchive文件(就像我从Mac Safari获得的那样),那么如果没有互联网连接,内容会正确显示(html,外部图像,视频预览)..webarchive文件实际上是一个plist(属性列表).我试图使用一个创建.webarchive文件的mac框架,但它不完整.
2)我在webView中删除了HTML:didFinishNavigation但它没有保存外部图像,css,javascript
func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) {
webView.evaluateJavaScript("document.documentElement.outerHTML.toString()",
completionHandler: { (html: AnyObject?, error: NSError?) in
print(html)
})
}
Run Code Online (Sandbox Code Playgroud)
我们挣扎了一个星期,这对我们来说是一个主要特征.任何想法都非常感激.
谢谢!
Google地图组件(com.google.android.gms.maps.GoogleMap)允许用户渲染自定义切片(OpenStreetMap或其他).这些磁贴可以在设备上并且可以脱机使用,这正是我通过扩展TileProvider所做的.与以下内容一起执行此操作:
mMap.setMapType(GoogleMap.MAP_TYPE_NONE);
Run Code Online (Sandbox Code Playgroud)
我没有从谷歌地图服务器中提取任何数据,并且可以合理地预期该组件可以在没有互联网连接的情况下工作.(我在此强调,我并不是要尝试缓存Google的数据 ;我正在使用独立于Google地图服务器的离线图块.)
我认为一切都很好,直到我意识到如果第一次执行设备离线时地图组件将无法工作.在这种情况下,我收到一条消息:
无法加载地图.无法联系谷歌服务器
我想这背后的原因是谷歌的API密钥需要我的应用程序进行身份验证才能允许组件执行.
谁能证实这是正确的?我真正想确定的是,如果组件在线执行一次,它将在之后运行正常.我必须确保没有超时问题需要组件稍后重新进行身份验证,这基本上会使我的应用程序无用.这需要我转向其他一些组件(例如OS Android).
任何关于此的亮点都将非常感激.甚至被指向我希望得到谷歌开发者的答复的渠道将是有用的.
谢谢
随着周围所有的嗡嗡声离线首先应用,自带了首创的事情之一是在客户端和服务器之间的数据同步.
关于这个主题有几个帖子和问题,在我的研究中,我发现了一个非常有趣的"数据访问和同步的独立库",名为Orbit.js.
到目前为止,我找不到关于Orbit.js和AngularJS之间集成的任何帖子或问题,我发现的所有参考都与Ember.js和Foundation集成.
我想知道是否有人已经在同一个项目中试过了.
有限制/限制吗? Orbit.js正如文档所说:
Orbit.js没有特定的外部运行时依赖性,但必须与实现Promises/A +规范的库一起使用,例如RSVP.
这可能是将其与AngularJS集成的限制吗?
我正在使用font-awesome图标来发布我的HTML,CSS模板.当我有实时链接时它们工作正常,但是当我下载CSS文件并包含在我的页面图标中时,图标消失了.
直播路径: <link href="http://netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.css" rel="stylesheet">
本地路径: <link href="css/font-awesome.css" rel="stylesheet">
如何在离线模式下使用字体真棒?
基于CRUD的应用程序部分需要:
事件采购(或"命令模式")是我正在寻找完成这些项目.我觉得用这个解决2和3感觉很舒服,但对于第一项,同步并不清楚.
如果时间戳用于每个命令(如果需要),那么脱机命令是否需要像实时(合并)一样应用于主系统,或者我可以认为它们应用于任何结束时命令(具有更新的时间戳)?
基于命令的同步的任何基本算法描述都会有所帮助.