Joe*_*oeS 3 safari offline web-applications offline-mode offline-caching
我正在开发一个可以在离线模式下使用移动Safari的网站.我可以将它标记到主屏幕并从那里加载它.但是,一旦从主屏幕打开,点击某些链接将跳出应用程序并在移动游猎中打开 - 尽管我在所有链接点击上阻止了默认()!
该应用程序绑定该<body>级别的onclick事件处理程序.使用事件委派,它捕获任何链接上的任何点击,查看其href(例如'help'或'review'),并动态调用javascript模板并更新页面.事件处理程序在事件对象上调用preventDefault() - 对于某些可用的链接,并使用模板输出更新页面.但是,对于在输出模板结果之前导致对本地数据库命中的链接,链接将在移动safari中打开.
在桌面游侠中,即使我处于离线状态,所有链接都可以正常工作 - 某些特定的移动游猎正在发生.
有关为什么某些链接可以脱机工作而不是其他链接的任何想法?清单文件中没有列出所讨论的链接URL,但由于阻止了链接操作,因此它们不应该(不应该).
还有一些奇怪之处:*一旦我点击一个加载在移动版Safari中的链接,即使我离线,这些相同的链接现在也可以工作,并且填充了数据库中的数据的模板可以正常工作.换句话说:从主屏幕打开时链接失败,但不是从移动safari离线内部失败*更改链接以删除数据库命中(用模拟数据库结果填充模板)解决问题,并且可以单击链接在主屏幕的应用程序中.
你可能想看看这个:https://gist.github.com/1042026
// by https://github.com/irae
(function(document,navigator,standalone) {
// prevents links from apps from oppening in mobile safari
// this javascript must be the first script in your <head>
if ((standalone in navigator) && navigator[standalone]) {
var curnode, location=document.location, stop=/^(a|html)$/i;
document.addEventListener('click', function(e) {
curnode=e.target;
while (!(stop).test(curnode.nodeName)) {
curnode=curnode.parentNode;
}
// Condidions to do this only on links to your own app
// if you want all links, use if('href' in curnode) instead.
if('href' in curnode && ( curnode.href.indexOf('http') || ~curnode.href.indexOf(location.host) ) ) {
e.preventDefault();
location.href = curnode.href;
}
},false);
}
})(document,window.navigator,'standalone');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4298 次 |
| 最近记录: |