在iOS中,其独立的Web应用程序模式可以阻止在Mobile Safari中打开链接,而不是在Web应用程序本身中打开:
(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 && // is a link
(chref=curnode.href).replace(location.href,'').indexOf('#') && // is not an anchor
( !(/^[a-z+.-]+:/i).test(chref) || // either does not have a proper scheme (relative links)
chref.indexOf(location.protocol+'//'+location.host)===0 ) // or is in the same protocol and domain
) {
e.preventDefault();
location.href = curnode.href;
}
},false);
}
})(document,window.navigator,'standalone');
这已经工作了一段时间,但是自从Apple的新iOS更新以来,每个链接在Mobile Safari中都是开放式的。
调试后,我发现代码中的条件仍然正确,因为在独立模式下,location.href = curnode.href;
仍在命中/执行。
所以我认为:更改文档它是 href 加载单击的链接的页面不再有效(更严格的规则左右?
我试图通过以下方式更改路径名而不是完整的 url:location.pathname = curnode.getAttribute('path');
(认为如果只更改路径,网络应用程序可能会保留在 webapp 中(
有没有人也面临这个问题,或者有人可以帮助我思考正确的方向以找到解决方案,或者更好但更不有趣,有解决方案吗?
找到了解决方案。我现在不再使用location.href = curnode.href;
而是使用location.assign(curnode.href);