Ok。@MeMTn と @chris-camaratta からの 2 つの回答から、いくつかの考えを以下に示します。
1)
気まぐれで、GeoLocation API への呼び出しを setTimeout 内に配置して (呼び出しスタックを空にできるようにするため)、問題は解決しました。なぜそれが問題を解決するのかわかりません。. .
私のangularjsアプリでも同じことをしましたが、うまくいきました。完全!
2)
サファリのバグではないと思います。次の例を試すことができます。私にとってはうまくいきました: http://www.w3schools.com/html/html5_geolocation.asp
setTimeout なしで (Safari で!) これが機能するのはなぜですか?
私の angularjs アプリケーションでは、GeoLocation の呼び出しは、ページが読み込まれたときに最初に発生することの 1 つです。これは、他のほとんどすべてのアプリケーション/Web ページに当てはまると思います。W3 の例には、ユーザーがクリックすると (ページが読み込まれたときに発生する) GeoLocation への呼び出しを開始するクリック可能なボタンがあります。
タイムアウトを設定することで、Safari は数 (ミリ) 秒間、他の処理 (私が知る限り、GeoLocation API の呼び出しに関係している可能性があります) を処理できます。
タイムアウトを < 10 に設定すると、localhost でもエラーが返されます。今のところ、100ミリ秒に固執すると思います。しかし、それは他の動作中のブラウザーにとって非常に不公平です。
バグであろうとなかろうと、明らかにSafariの何かです。