そのため、Safariは1つの特定のエラーについて私に叫び続けます。
Google Maps APIを使用してmap.getCenter();
を呼び出そうとしています。ただし、これはmap
が完全にロードされる前に発生する場合があります。
そのため、代わりに関数で次のようにundefined
呼び出しをテストします。
if (map.getCenter() != undefined)
しかし、結果がundefined
かどうかをテストするためだけに呼び出しを行うのも好きではないので、それでもエラーが発生します。
ここで助けてもらえますか?
ありがとう!
if (typeof map !== 'undefined' && map.getCenter) {
// code for both map and map.getCenter exists
} else {
// if they dont exist
}
これは、関数の存在を確認する正しい方法です。関数を呼び出してその存在をテストすると、エラーが発生します。
PDATE:スニペットが更新されました。
私は実際にこれらの線に沿って何かを好みます。
if(typeof myfunc == 'function') {
myfunc();
}
何かが未定義ではないからといって、それが機能するわけではありません。
_if (typeof map.getCenter !== 'undefined')
_
エラーをスローしません。
ですから、if (typeof map.getCenter === 'function') map.getCenter();
技術的には、map
がmap.getCenter()
ではなく未定義であるかどうかをテストする必要があります。未定義の参照で関数を呼び出すことはできません。
ただし、 Google独自のチュートリアル は、body.onloadハンドラーでAPIにアクセスするJavaScriptを呼び出して、すべてのリモート.jsファイルが読み込まれるまで何も参照しないようにすることをお勧めします。これやってるの?これは、APIをロードする前にJavaScriptが実行されるときに完全に失敗するのではなく、問題を永続的に解決します。
私は最近、typeof演算子を使用して物や型をテストする習慣があります。これは、応答タイプの混乱を避けるために文字列としてタイプを返します。
if( typeof map.getCenter != 'undefined') ...
より正確かどうかはわかりませんが、このプロセスで良い結果が得られます。
map
が未定義かどうかをテストする必要があります。現在のチェックでは、まだ関数呼び出しを実行しようとしています。
Map.getCenter()が常に関数であると仮定すると、このチェックを使用するだけで十分です。
if (map.getCenter) {
var x = map.getCenter();
}