15

我已将 Geolocation API 构建到我的 web 应用程序中,并且所有浏览器都运行良好。Safari 8 和 7.1 除外。浏览器在允许或不允许之后不断请求许可,并最终陷入无限循环,使浏览器(选项卡)无法使用。只需在 Safari 中访问http://html5demos.com/geo即可轻松重现。

是否有任何修复或这只是 Safari 中的一个错误?我搜索但找不到任何相关内容。

在此处输入图像描述

4

3 回答 3

26

我们的团队也看到了这一点。起初我们认为我们可能陷入了其他浏览器忽略的某种循环中,因此我们检测了代码并确认调用只发生了一次。我们通过强制断点暂停 JavaScript,并且警报不断出现(来来去去......)。在这一点上,我们很确定问题不在我们的代码中。

一时兴起,我将对 GeoLocation API 的调用放在 a 中setTimeout(以允许调用堆栈为空),问题就消失了。不知道为什么这会解决问题。. .

编辑

根据请求,我举了一个例子@ https://jsfiddle.net/r8hst2zp/1/

于 2015-02-10T16:07:28.750 回答
1

我认为这不是 safari 中的错误,您可以尝试以下示例,它对我来说效果很好:

http://www.w3schools.com/html/html5_geolocation.asp

于 2014-12-05T15:27:27.930 回答
1

好的。因此,从@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 的问题。

于 2015-02-26T15:09:08.013 回答