PWA в iOS 12 больше не выполняет повторно Javascript при повторном открытии приложения

У меня есть PWA, который по сути перенаправляет пользователя в приложение сообщений при открытии с использованием Javascript. С выпуском iOS 12 и изменениями в PWA веб-страница больше не инициализируется повторно и не выполняет Javascript при повторном открытии или при повторном получении фокуса. Вместо этого теперь он загружает ранее сохраненное состояние и не будет повторно выполнять Javascript.

У кого-нибудь есть идеи по этому поводу? Могу ли я принудительно выполнять Javascript каждый раз, когда PWA получает фокус? Могу ли я заставить страницу повторно инициализироваться при загрузке?

Пример кода ниже:

<html manifest = "ios/scripts/offline.manifest">

<head>
<meta content = "en-us" http-equiv = "Content-Language" />
<meta content = "text/html; charset=utf-8" http-equiv = "Content-Type" />
<title>SMS</title>

<meta name = "viewport" content = "width=device-width, initial-scale=1">
<meta name = "apple-mobile-web-app-title" content = "SMS">
<meta name = "apple-mobile-web-app-capable" content = "yes" />
<meta name = "apple-mobile-web-app-status-bar-style" content = "black" />


<link rel = "apple-touch-icon" sizes = "180x180" href = "ios/img/[email protected]">
<link rel = "apple-touch-startup-image" href = "ios/img/LaunchImage-1125@3x~iphoneX-portrait_1125x2436.png" media = "(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)">
</head>

<body>
<script>
        if (window.navigator.standalone) {
            document.write('<a id = "url" href = "sms:1111111111" name = "url"></a>');
            var e = document.getElementById('url');
            var ev = document.createEvent('MouseEvents');
            ev.initEvent('click', true, true);
            e.dispatchEvent(ev);
        }
</script>
</body>

</html>


Я также сталкиваюсь с той же проблемой после открытия почтового приложения с тегом <a>. Я застрял на пустом экране. Кто-нибудь сталкивался с такой же проблемой?

Christlin Panneer 04.07.2019 11:50
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
1
1 118
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Взгляните на этот пост о состоянии PWA: Прогрессивное веб-приложение в iOS 12.2 Beta 1 (сборка 16E5181f)

Я вижу, что новый PWA сохраняет последнее состояние при выходе из приложения. Есть ли способ предотвратить это?

Uriel Katz 12.05.2019 00:26
Ответ принят как подходящий

Я столкнулся с той же проблемой. Вот что я сделал, чтобы заставить PWA выполнять javascript при запуске:

  1. Зарегистрируйте событие видимости страницы во встроенном javascript между тегами.
  2. В обработчике события видимости страницы выполните javascript, который вы хотите выполнить при последующем открытии PWA.

Каждый раз, когда PWA открывается, он запускает событие видимости страницы и выполняет ваш скрипт.

Пример: в вашем html файле:

<script>
registerPageVisibility()
</script>

function registerPageVisibility() {
   
    let hidden;
    let visibilityChange;
    if (typeof document.hidden !== 'undefined') { // Opera 12.10 and Firefox 18 and later support
        hidden = 'hidden';
        visibilityChange = 'visibilitychange';
    } else if (typeof document.msHidden !== 'undefined') {
        hidden = 'msHidden';
        visibilityChange = 'msvisibilitychange';
    } else if (typeof document.webkitHidden !== 'undefined') {
        hidden = 'webkitHidden';
        visibilityChange = 'webkitvisibilitychange';
    }
    window.document.addEventListener(visibilityChange, () => {
        if (!document[hidden]) {
            //put your script here and it will be execute everytime when PWA is opened.
            
        }
    });
}

Проблема заключалась в использовании функции document.write, так как страница перезаписывалась и очищалась после выполнения.

Uriel Katz 20.10.2019 21:18

Другие вопросы по теме