PWA в iOS 12 больше не перезапускает Javascript при повторном открытии приложения - PullRequest
1 голос
/ 12 мая 2019

У меня есть 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/Icon-60x60@3x.png">
<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>


Ответы [ 2 ]

1 голос
/ 09 июля 2019

Я столкнулся с той же проблемой.Вот что я сделал, чтобы заставить 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.
            
        }
    });
}
0 голосов
/ 12 мая 2019
...