我正在开发一个可以在离线模式下与移动 Safari 配合使用的网站。我可以将其添加到主屏幕上并从那里加载。但是,一旦从主屏幕打开,单击某些链接将跳出应用程序并在移动 safari 中打开 - 尽管我在所有链接单击上阻止了 Default()!
该应用程序在<body>
等级。使用事件委托,它可以捕获任何链接上的任何点击,查看其 href(例如“帮助”或“评论”),并动态调用 JavaScript 模板并更新页面。事件处理程序在事件对象上调用 PreventDefault() – 用于some有效的链接的数量,并且页面将使用模板输出进行更新。但是,对于在输出模板结果之前导致本地数据库命中的链接,这些链接会在 mobile safari 中打开。
在桌面 safari 中,即使我处于离线状态,所有链接都可以工作 - 正在发生移动 safari 特有的事情。
你有什么想法为什么有些链接可以离线使用,而其他链接则不行?清单文件中没有列出任何有问题的链接 URL,但它们不需要(不应该)列出,因为链接操作被阻止。
一些额外的奇怪之处:
* 一旦我单击在移动 Safari 中加载的链接,即使我处于离线状态,这些相同的链接现在也可以正常工作,并且使用数据库中的数据填充的模板也可以正常工作。换句话说:从主屏幕打开时链接会失败,但从 mobile safari 离线打开时链接不会失败
* 更改链接以删除数据库命中(使用模拟数据库结果填充模板)解决了问题,并且可以从主屏幕在应用程序中单击链接。
您可能想看看这个:https://gist.github.com/1042026 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');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)