首页 > 解决方案 > 在 OpenID Microsoft 登录后,PWA 在 Safari iOS (13.5) 中的导航点击冻结

问题描述

OpenID 授权用户后 PWA 冻结 [iOS Safari Standalone]

我为我们的安全人员构建了一个简单的 PWA,它允许员工单击链接并查看有关我们公司在各种事务上的政策的内容。该应用程序使用 Microsoft 的 OWIN 中间件库来授权我们的员工通过其企业 Microsoft 登录凭据访问该应用程序。当用户单击我们登录页面上的“员工登录”提示时,他们将被重定向到 Microsoft 的域以完成登录过程。登录完成后,他们将被重定向回我们应用的主页。

问题

仅当 iOS 用户 (v13) 将应用程序固定到其主屏幕然后以独立模式启动应用程序时,并且仅用户完全终止应用程序然后返回后才会出现此问题。我们已经在 Chrome、Safari(非独立模式)、Firefox 上测试了该应用程序,并且这些浏览器中不存在该问题。该应用程序可以无缝运行,直到用户完成 Microsoft 登录并被重定向回主页。此时,如果用户单击指向另一个页面(在应用程序内)的链接,应用程序将完全锁定,不会响应进一步的按钮单击,并且不会加载用户提示的页面。控制台中不会抛出任何错误。

我们发现,如果用户切换到另一个应用程序(即使只是一秒钟),然后当它被锁定时又切换回我们的 PWA,一切都会立即启动。此时,用户尝试导航到的页面会立即加载,无需进一步提示,并且应用程序在此之后 100% 无缝运行。它只是冻结的默认页面的初始版本。

潜在原因

我目前的工作理论是,问题是由以下一些组合引起的:

    // "cache-first" approach for requests from client. Will try to get the file from the cache.
    // If no match found, it will send the request onto the network. If both fail serve fallback page.
    self.addEventListener("fetch", function (event) {
        if (event.request.method !== "GET") return;
        event.respondWith(
            // Try the cache
            caches.match(event.request).then(function (response) {
                console.log("[service worker] attempting to fetch file from cache...");
                return response || fetch(event.request);
            }).catch(function () {
                // If both fail, show a generic fallback:
                return caches.match(offlineFallbackPage);
            })
        );
    });

我已经使用 Mac 远程调试了 PWA,并且我已经验证的是,当用户单击链接以导航到新页面时触发的 click 事件得到了正确处理,因此问题确实出现在加载链接页面本身。除此之外,远程调试已确认在尝试导航到站点上的其他页面时根本没有触发 HTTP GET 错误(或任何其他错误)。

这是我构建的第一个 PWA,我是所有这些东西的新手。所以我很想知道我是否遗漏了什么或者我可以从这里去哪里。我搜索了所有论坛,似乎无法在任何地方找到答案。谢谢!

标签: iosweb-applicationssafariprogressive-web-appsopenid

解决方案


推荐阅读