iOS Safari - автономная навигация в веб-приложении внезапно не работает - PullRequest
0 голосов
/ 03 мая 2018

В iOS, его автономном модусе веб-приложения, вы можете запретить открытие ссылки в Mobile Safari вместо открытия в самом веб-приложении:

(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; все еще выполняется / выполняется.

Так что я думаю: изменение документа, который загружает страницу для ссылки, по которой щелкнули, больше не работает (более строгие правила или около того?)

Я попытался изменить путь вместо полного URL, выполнив:
location.pathname = curnode.getAttribute('path');
(Считая, что если изменить только путь, возможно, веб-приложение останется в веб-приложении)

Есть ли кто-нибудь, кто также сталкивался с этой проблемой, или кто-то, кто может помочь мне подумать в правильном направлении для решения или, лучше, но не так весело, найти решение?

1 Ответ

0 голосов
/ 04 мая 2018

Нашел решение. Вместо использования location.href = curnode.href; я теперь использую location.assign(curnode.href);

...