我已将 Geolocation API 构建到我的 web 应用程序中,并且所有浏览器都运行良好。Safari 8 和 7.1 除外。浏览器在允许或不允许之后不断请求许可,并最终陷入无限循环,使浏览器(选项卡)无法使用。只需在 Safari 中访问http://html5demos.com/geo即可轻松重现。
是否有任何修复或这只是 Safari 中的一个错误?我搜索但找不到任何相关内容。
我已将 Geolocation API 构建到我的 web 应用程序中,并且所有浏览器都运行良好。Safari 8 和 7.1 除外。浏览器在允许或不允许之后不断请求许可,并最终陷入无限循环,使浏览器(选项卡)无法使用。只需在 Safari 中访问http://html5demos.com/geo即可轻松重现。
是否有任何修复或这只是 Safari 中的一个错误?我搜索但找不到任何相关内容。
我们的团队也看到了这一点。起初我们认为我们可能陷入了其他浏览器忽略的某种循环中,因此我们检测了代码并确认调用只发生了一次。我们通过强制断点暂停 JavaScript,并且警报不断出现(来来去去......)。在这一点上,我们很确定问题不在我们的代码中。
一时兴起,我将对 GeoLocation API 的调用放在 a 中setTimeout
(以允许调用堆栈为空),问题就消失了。不知道为什么这会解决问题。. .
编辑
根据请求,我举了一个例子@ https://jsfiddle.net/r8hst2zp/1/
我认为这不是 safari 中的错误,您可以尝试以下示例,它对我来说效果很好:
好的。因此,从@MeMTn 和@chris-camaratta 的两个答案中,有一些想法:
1)
一时兴起,我将对 GeoLocation API 的调用放在 setTimeout 中(以允许调用堆栈为空),问题就消失了。不知道为什么这会解决问题。. .
我在我的 angularjs 应用程序中做了同样的事情,它可以工作。完美的!
2)
我认为这不是 safari 中的错误,您可以尝试以下示例,它对我来说很好:http: //www.w3schools.com/html/html5_geolocation.asp
没有 setTimeout 怎么会工作(在 Safari 中!)?
在我的 angularjs 应用程序中,对 GeoLocation 的调用是页面加载时首先发生的事情之一。我相信几乎所有其他应用程序/网页都是这种情况。在 W3 示例中,有一个可单击按钮,当用户单击它时会触发对 GeoLocation 的调用(当页面加载时会发生这种情况)。
通过设置超时,我们允许 Safari 处理一些其他事情(据我所知,这可能与调用 GeoLocation API 有关)几(毫秒)秒。
如果我将超时设置为 < 10,即使在本地主机上,错误也会回来。我想我现在会坚持 100 毫秒。但这对于其他正常工作的浏览器来说是非常不公平的。
错误与否,这显然是 Safari 的问题。