URL-ссылка из электронной почты, как открыть существующую вкладку приложения и не перезагружать приложение на новой вкладке - PullRequest
0 голосов
/ 04 июня 2019

Пользовательская история:

В браузере мое Прогрессивное веб-приложение открыто по любому URL-адресу

https://mypwa.com/xxxx

Я получаю письмо со ссылкой на страницу моего PWA

https://mypwa.com/post/<postId>

Вместо того, чтобы открывать новую вкладку в браузере, я хочу, чтобы моя существующая вкладка PWA фокусировалась и переходила по URL. Я не хочу ни новой вкладки, ни нового запуска PWA (это стоит дорого при загрузке записей)

С помощью postMessage Service Worker может указать существующей вкладке, чтобы получить фокус и перейти по пути /post/<postId>. Предполагается, что работает, но я получаю «Исключение DOM» на client.focus () в сервисном работнике, из события получения, короче:

self.addEventListener("fetch", function(event) {
  var requestUrl = new URL(event.request.url);
  var pathname = requestUrl.pathname;

  if (
    event.request.mode === "navigate" &&
    requestUrl.origin === location.origin
  ) {
    const rootUrl = new URL("/", location).href;

    const mg = pathname.match(regexpPost);
    const postId = mg[1];

    event.waitUntil(
      clients.matchAll().then(matchedClients => {
        for (let client of matchedClients) {
          if (client.url.indexOf(rootUrl) >= 0) {
            return client
              .focus() //  ***** CRASHING HERE *****
              .then(() => {
                return sendMessageClient(client, { postId }).then(resp => {
                  other;
                });
              });
          }
        }
      })
    );
  }
});

Мне также не хватает того, как закрыть вновь открытую вкладку. Я не хочу держать это: мертвые вкладки могут накапливаться, и это не очень хороший пользовательский опыт.

Пробовал javascript window.close(); но он должен реагировать на действия пользователя ...

...