gpt4 book ai didi

javascript - 导航时如何保持 iOS Safari 的独立模式

转载 作者:可可西里 更新时间:2023-11-01 03:16:37 25 4
gpt4 key购买 nike

在 iOS 的独立 Web 应用模式中,当您单击一个链接时,该链接将在 Mobile Safari 中打开,而不是停留在独立模式中。这对我来说毫无意义(至少对于内部链接而言)。

我能想到的解决这个问题的唯一方法是向 document 节点添加一个点击处理程序,然后像这样手动导航:

if (window.navigator.standalone) {
document.addEventListener('click', (e) => {
if (e.target.tagName === 'A') {
e.preventDefault();
window.location = e.target.getAttribute('href');
});
}

有没有更简单的方法来获得这种行为?这真的伤了我的眼睛。

最佳答案

不幸的是,按照这些思路做的事情是标准的方法。 GitHub 上的 irae 整理了一个名为 Stay Standalone 的脚本它将为您处理所有脏工作,并在各种边缘情况下进行了测试。虽然脚本有点旧,但它确实适用于现代版本的 iOS。

它可能有点难看,但代码是有弹性的,可以包含在一个通用的 Javascript 包中。它不会改变其他场景的行为。这只是猜测,但我认为苹果选择这种行为的原因是独立的网络应用程序没有前进或后退按钮,点击链接可能会使应用程序处于“不可用”状态,并且对于不完全打算成为应用程序的网站。对于最终用户来说,这可能是一般情况下最理想的行为。

这是 Javascript 的副本:

(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');

可以看到the tests here .

关于javascript - 导航时如何保持 iOS Safari 的独立模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43711338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com