防止离线iphone webapp在Safari中打开链接

Joe*_*oeS 3 safari offline web-applications offline-mode offline-caching

我正在开发一个可以在离线模式下使用移动Safari的网站.我可以将它标记到主屏幕并从那里加载它.但是,一旦从主屏幕打开,点击某些链接将跳出应用程序并在移动游猎中打开 - 尽管我在所有链接点击上阻止了默认()!

该应用程序绑定该<body>级别的onclick事件处理程序.使用事件委派,它捕获任何链接上的任何点击,查看其href(例如'help'或'review'),并动态调用javascript模板并更新页面.事件处理程序在事件对象上调用preventDefault() - 对于某些可用的链接,并使用模板输出更新页面.但是,对于在输出模板结果之前导致对本地数据库命中的链接,链接将在移动safari中打开.

在桌面游侠中,即使我处于离线状态,所有链接都可以正常工作 - 某些特定的移动游猎正在发生.

有关为什么某些链接可以脱机工作而不是其他链接的任何想法?清单文件中没有列出所讨论的链接URL,但由于阻止了链接操作,因此它们不应该(不应该).

还有一些奇怪之处:*一旦我点击一个加载在移动版Safari中的链接,即使我离线,这些相同的链接现在也可以工作,并且填充了数据库中的数据的模板可以正常工作.换句话说:从主屏幕打开时链接失败,但不是从移动safari离线内部失败*更改链接以删除数据库命中(用模拟数据库结果填充模板)解决问题,并且可以单击链接在主屏幕的应用程序中.

Mis*_*lin 5

你可能想看看这个: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)