Пользователь сможет загрузить PWA в двух местах.
www.example.com и www.example.com. /chat
У меня есть два разных манифеста с соответствующими start_urls (example.com и example.com/chat). Они также находятся в разных каталогах.
Домашняя страница находится в: statics\homepage\json\example.webmanifest
Чат находится в: statics\chat\json\example.webmanifestКогда пользователь находится на домашней странице, мы внедрим манифест домашней страницы, а когда пользователь находится в чате, мы внедрим манифест чата.
Я хочу убедиться, что когда у пользователя есть либо PWA установлен, существующая кнопка «Установить PWA» вместо этого откроет PWA.
Для этого я присвоил обоим файлам веб-манифеста одинаковые связанные_приложения.
в как домашняя страница\json\example.webmanifest, так и чат\json\example.webmanifest
Код: Выделить всё
"related_applications": [
{
"platform": "webapp",
"url": "https://example.com/statics/homepage/json/example.webmanifest",
"id": "homepage"
},
{
"platform": "webapp",
"url": "https://example.com/statics/chat/json/example.webmanifest",
"id": "homepage"
}
]
Проблема в том, что если пользователь устанавливает PWA на один URL-адрес, другой URL-адрес не обнаруживает указанное PWA (getInstalledRelatedApps() возвращает пустой массив).
Например, если я установил PWA через www.example.com и перехожу на www.example.com /chat, getInstalledRelatedApps() возвращает пустой массив. Но если я вернусь на www.example.com и вызову getInstalledRelatedApps(), он вернет установленное приложение правильно.
Нужно ли мне настроить что-нибудь еще? чтобы добиться ожидаемого от getInstalledRelatedApps() поведения?
Я знаю, что мы читаем два разных файла манифеста на главной странице и в чате. Но в манифесте чата путь к манифесту домашней страницы находится на вкладке linked_applications.
Я вижу, что связанные приложения в файле манифеста делают что-то вроде этого:
Код: Выделить всё
const manifestUrl = document.querySelector('link[rel="manifest"]')?.getAttribute("href");
const manifestResponse = await fetch(manifestUrl as string);
const manifest = await manifestResponse.json();
const relatedApplications = manifest.related_applications;
Так что я бы подумал getInstalledRelatedApps() должен читать оба, просматривать установленные приложения и сопоставлять URL-адреса, и когда он видит URL-адрес веб-манифеста домашней страницы, он должен сопоставить его с URL-адресом установленного приложения, но это не случай.
Браузер обнаруживает, что один и тот же PWA применяется к обеим ссылкам, поскольку у меня также есть возможность открыть ссылку в PWA в строке поиска.
Подробнее здесь: https://stackoverflow.com/questions/791 ... alled-apps
Мобильная версия