Определить, использует ли iOS веб-приложение

Мне было интересно, можно ли определить, использует ли пользователь iOS веб-приложение или просто посещает его обычным способом с помощью браузера Safari.

Причина, по которой я хочу добиться этого, заключается в том, что в веб-приложении iOS, когда пользователь щелкает ссылку, он будет перенаправлен в браузер Safari. Поэтому я использую следующий обходной путь, чтобы заставить его оставаться в веб-приложении (предотвратить переключение на браузер Safari).

$( document ).on("click",".nav ul li a",
        function( event ){

        // Stop the default behavior of the browser, which
        // is to change the URL of the page.
        event.preventDefault();

        // Manually change the location of the page to stay in
        // "Standalone" mode and change the URL at the same time.
        location.href = $( event.target ).attr( "href" );

        }
    );

Но я хочу, чтобы это обходное решение происходило только тогда, когда пользователь использует веб-приложение, я хочу, чтобы оно было условным для пользователей веб-приложения. Так что не в браузере Safari по умолчанию.


person koningdavid    schedule 01.08.2013    source источник


Ответы (2)


Вы должны обнаружить это, используя некоторый javascript:

<script>
if (("standalone" in window.navigator) &&       // Check if "standalone" property exists
    window.navigator.standalone){               // Test if using standalone navigator

    // Web page is loaded via app mode (full-screen mode)
    // (window.navigator.standalone is TRUE if user accesses website via App Mode)

} else {

    // Web page is loaded via standard Safari mode
    // (window.navigator.standalone is FALSE if user accesses website in standard safari)
}
</script>
</head> 

Теперь необходима дополнительная проверка "standalone" in window.navigator, потому что некоторые браузеры не имеют свойства standalone, и вы не хотите, чтобы ваш код давал сбой для этих браузеров.

person Jean-Paul    schedule 01.08.2013
comment
Хороший и простой ответ! Я искал stackoverflow ofc, но по какой-то причине эта тема не всплыла. Даже когда я ввел заголовок своего вопроса... Спасибо! - person koningdavid; 01.08.2013
comment
Так и сделаю, просто нужно подождать еще 3 минуты ;) - person koningdavid; 01.08.2013
comment
@koningdavid: Рад помочь вам! - person Jean-Paul; 01.08.2013
comment
в машинописном тексте используйте window.navigator['standalone'] - person Fabiano Albernaz; 06.02.2020

iOS и Chrome WebApp ведут себя по-разному, поэтому я пришел к следующему:

isInWebAppiOS = (window.navigator.standalone == true);
isInWebAppChrome = (window.matchMedia('(display-mode: standalone)').matches);
person Javan R.    schedule 02.12.2016
comment
Будьте осторожны с window.matchMedia('(display-mode: standalone)').matches: это также true во всплывающих окнах Chrome на рабочем столе. - person Antelle; 16.05.2017