DEV Community

Kenji Suzuki
Kenji Suzuki

Posted on

iOS PWAでnavigateが動作しない時がある

2025-06-14

const getClient = async () => {
  const clients = await sw.clients.matchAll({
    type: "window",
    includeUncontrolled: false,
  });
  return clients.find((client) => {
    return client.focused;
  });
};

const waitForClient = async () => {
  for (let i = 0; i < 10; i++) {
    const client = await getClient();
    if (client) {
      return client;
    }

    await log("no client");

    await new Promise<void>((resolve) => {
      sw.setTimeout(() => {
        resolve();
      }, 100);
    });
  }

  await log("create client");
  return await sw.clients.openWindow("/ios-pwa");
};
Enter fullscreen mode Exit fullscreen mode
  • 上記のコードで client を取得して navigate するようにした
  • 基本的には pwa をタスキルした状態でも、client は一つはある
  • たまにno clientが発生する(別のコードで確認済み)
  • タスキルしなくても client.id は変わることが多い
  • たまに同じになるときがあって、そのとき失敗しているようにみえる
  • ただし次の通知では成功する
  • 毎回 openWindow すると回避できそうではある(少し動作が遅くなる)

Top comments (0)