我已经构建了一个PWA,它调用javascript API navigator.geolocation.getCurrentPosition
,当Safari权限设置为Ask时,它会提示用户访问位置。这是正确的行为,在Safari中打开时可以按预期工作。
但是,当添加到主屏幕并以“独立”显示模式运行时,我的电话上没有打开位置警报(iPhone 13 mini / iOS 15. 1. 1)。而且通话从来不会超时。然后如果我从PWA切换到Safari,位置警报/提示突然在Safari中显示。所以看起来警报针对的是错误的“标签页”。如果PWA显示模式为“browser”或“mimimal-ui”,且其中任何一种模式均正常运行,则不会发生这种情况。
我只能在我的手机(iPhone13 mini /iOS15.1.1)上复制这一点。我还在各种老手机(15.1.1和14.7)以及几个模拟器上进行了测试,它们的表现都符合预期。这可能是我手机上的一个模糊设置,但它确实感觉很像一个iOS Safari bug。
2条答案
按热度按时间z0qdvdin1#
我在iOS15.5中使用iPad时也遇到过这个问题。我的应用程序是一个在Safari移动的上运行的Web应用程序,添加到主屏幕上。在
standalone
和fullscreen
显示屏上也发生了完全相同的情况,而在minimal-ui
或browser
显示屏上则没有:提示要么是有史以来第一次显示时,网站需要位置权限或Location Services -> Safari Webistes
是在“询问下次或当我分享”。“而使用应用程序”工作正常。为了克服这个问题,我用race
navigator.geolocation.getCurrentPosition
和比PositionOptions.timeout
长一点的setTimeout
进行比较,如果后者获胜,就意味着我们检测到了这种情况,我可以在那里抛出一些自定义错误,以通知用户发生了什么以及该怎么做(手动更改Location Services -> Safari Webistes
)。oug3syen2#
我想我已经知道为什么会出现这个错误了。我发现您必须使用HTTPS连接,这样safari才不会阻止您向safari应用程序发出的获取您提到的权限的请求,所以我想您应该在服务器的特性分支上测试一下您的理论