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