15

Geolocation API を Web アプリケーションに組み込みましたが、すべてのブラウザーが正常に動作しています。Safari 8 および 7.1 を除く。ブラウザは、許可または許可しない場合でも許可を求め続け、無限ループに陥り、ブラウザ (タブ) が使用できなくなります。Safariでhttp://html5demos.com/geoにアクセスするだけで簡単に再現できます。

これに対する修正はありますか、それとも Safari の単なるバグですか? 検索しましたが、関連するものは見つかりませんでした。

ここに画像の説明を入力

4

3 に答える 3

26

私たちのチームもこれを見ました。最初は、他のブラウザーが無視する何らかのループ内でスタックしている可能性があると考えたため、コードをインストルメント化して、呼び出しが 1 回だけ発生していることを確認しました。ブレークポイントを強制して JavaScript を一時停止したところ、アラートが発生し続けました (そして、発生し続けました...)。この時点で、問題がコードにあるのではないと確信しました。

気まぐれで、GeoLocation API への呼び出しをsetTimeout(呼び出しスタックを空にできるようにするために) 内部に配置すると、問題は解消されました。なぜそれが問題を解決するのかわかりません。. .

編集

リクエストごとに、例を挙げました @ https://jsfiddle.net/r8hst2zp/1/

于 2015-02-10T16:07:28.750 に答える
1

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の何かです。

于 2015-02-26T15:09:08.013 に答える