在iOS中,它的独立网络应用程序模式可以阻止在Mobile Safari中打开链接,而不是在webapp本身中打开:
(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会加载已被点击的链接的页面不再起作用(更严格的规则左右?)
我尝试通过执行以下操作来更改路径名而不是完整网址:
location.pathname = curnode.getAttribute('path');
(想一想如果只改变了路径,那么webapp将保留在webapp中)
那里是否还有人面临这个问题,或者有人可以帮我思考解决方案的正确方向,或者更好但不那么有趣,有解决方案?
答案 0 :(得分:0)
找到解决方案。我现在使用location.href = curnode.href;
location.assign(curnode.href);