Ok. So from the two answers from @MeMTn and @chris-camaratta, here is a few thoughts:
1)
On a whim I placed the call to the GeoLocation API inside a setTimeout (to allow the call stack to empty) and the problem went away. No idea why that would fix the issue. . .
I did the same in my angularjs app, and it works. Perfect!
2)
i don't think it is a bug in safari, you can try the following example, it worked fine for me: http://www.w3schools.com/html/html5_geolocation.asp
How come this works (in Safari!) without setTimeout?
In my angularjs application, the call to GeoLocation is one of the first things to happen when the page loads. I believe this is the case for almost all other applications/web pages. In the W3 example there is a clickable button that fires the call to GeoLocation when the user clicks it (which happens when the page has loaded).
By setting a timeout, we allow Safari to deal with some other stuff (that might have something to do with calling the GeoLocation API for all I know) for a few (milli)seconds.
If I set the timeout to < 10 the error is back, even on localhost. I think I will stick with 100 ms for now. But that is highly unfair for other, working browsers.
Bug or not it's clearly something with Safari.
one()
in an attempt to solve the problem. – Daughtry