Подтвердить что ты не робот

Как определить, работает ли веб-приложение автономно на мобильных устройствах Chrome

Chrome mobile недавно добавила возможность добавления на главный экран, аналогичный iOS. Это классно, но он не поддерживает его, а также iOS - он не поддерживает window.navigator.standalone, поэтому вы не можете определить, запущен ли он как автономное приложение.

Ссылка говорит:

Как определить, работает ли приложение в качестве установленного приложения?

Вы не можете прямо.

Обратите внимание, что это говорит "прямо". Мой вопрос: можем ли мы сделать это косвенно? Есть ли какой-то сложный способ сделать обоснованное предположение?

4b9b3361

Ответ 1

Этот ответ приходит с огромной задержкой, но я размещаю его здесь только для других людей, которые изо всех сил пытаются найти решение.

Недавно Google внедрил условный CSS, поэтому есть два возможных способа определить, работает ли приложение автономно:

Использование CSS:

@media all and (display-mode: standalone) {
    /* Here goes the CSS rules that will only apply if app is running standalone */
}

Использование CSS и Javascript:

function isRunningStandalone() {
    return (window.matchMedia('(display-mode: standalone)').matches);
}
...
if (isRunningStandalone()) {
    /* This code will be executed if app is running standalone */
}

Если вам нужна дополнительная информация, у Google Developers есть страница, посвященная этой теме: https://developers.google.com/web/updates/2015/10/display-mode

Ответ 2

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

isInWebAppiOS = (window.navigator.standalone == true);
isInWebAppChrome = (window.matchMedia('(display-mode: standalone)').matches);

То же, что и здесь: Обнаружение, если iOS использует webapp

Ответ 3

Для IOS у нас есть свойство window.navigator.standalone для проверки..

Но для Chrome на Android он не поддерживает это свойство. Единственный способ проверить это - вычислить ширину и высоту экрана.

Ниже приведен код для проверки того, что:

navigator.standalone = navigator.standalone || (screen.height-document.documentElement.clientHeight<40)

Я получил ссылку из ниже ссылки:

Основные веб-приложения для Android Благодаря Chrome 31

Ответ 4

Старый вопрос, но значительно лучшие решения, доступные сегодня для Chrome Android.

Один из способов (чистейший ИМО). Вы можете добавить манифест веб-приложения с ключом start_url со значением, которое добавляет параметр строки запроса на вашу обычную домашнюю страницу.

Например: - если URL домашней страницы https://www.example.com. в наборе манифестов веб-приложений

    "start_url": "https://www.example.com/?user_mode=app"

Руководство Google по манифесту веб-приложения:https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/

Ответ 5

В IOS локальный ресурс для автономного и веб-режима отличается. С помощью андроида KitKat и Chrome, когда вы сохраняете значение в localstorage в веб-версии, вы можете получить его в автономном режиме.

Итак, вам просто нужно сохранить document.documentElement.clientHeight в localstorage, когда пользователь просматривает веб-версию (перед добавлением на рабочий стол). Затем просто сравните текущее значение document.documentElement.clientHeight с значением localstorage. Если текущее значение > , это автономный режим.

Я попробовал это на нескольких устройствах.

Ответ 6

Для Google Chrome (Android) начиная с версии 39 с манифестом веб-приложения (json), и в случае, если это одностраничное приложение, я использую этот "трюк":

В манифесте. json я поставлю: "start_url": "standalone.html".

Обычно это (в моем случае index.html), но из index.html я делаю идентичный клон: standalone.html(или все, что вам нравится).

Затем, чтобы проверить, я использую Javascript следующим образом:

var locurl = document.location.href;
if (locurl.indexOf("standalone.html") != -1) {
    console.log("app is running standalone");
} else {
    console.log("app is running in normal browser mode");
}

Это работает.

Он может работать и в Google Chrome (mobile) версии 31-38 с помощью этого метатега:

<meta name="application-url" content="http://my.domain.com/standalone.html">. Еще не проверено.

Ответ 7

Чтобы определить, работает ли он в веб-представлении MIT AI2:

if (typeof window.AppInventor!="undefined") { return true; }

Ответ 8

Не существует "правильного" способа сделать это на Android, поэтому поддержка API отсутствует. Обходной путь, который мы использовали в моей компании -

  • При первом входе в систему храните контрольный экран в localstorage. По screenHeight я имею в виду document.documentElement.clientHeight перед загрузкой страницы, с тех пор doc растет и не точная мера для реальной доступной высоты экрана.

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

Нет сценария, на котором он может уменьшиться, если вы хотите сохранить значение FIRST TIME для высоты экрана.

Caveat - пользователь, который будет чистить наличные деньги. Мы решили игнорировать это, поскольку большинство пользователей этого не делают или делают это относительно редко, и это будет достаточно (по нашему мнению) в течение некоторого времени, пока не будет исправлено API для этого (надеюсь, что будет:))

Вариант b - проверить доступную высоту экрана и высоту экрана устройства, совпадение для нескольких тестовых устройств и режимов браузера показало некоторый шаблон (доступная высота < 70 в webapp) - я уверен, что более широкое сравнение может получить значения, которые будут достаточны для 90% устройств в 90% случаев.

Все это обходное решение, конечно, не притворяясь надежным стабильным способом получить желаемую функциональность, но для нас это сработало, поэтому я надеюсь, что это поможет кому-то другому, кто воевал с этой ошибкой (возможно, api особенность другой способ). Удачи:) enter image description here