3

コールバックがグローバル関数である場合にのみ、Google Mapsv3APIをダウンロードできます。

function onMapLoad() {
    alert('API is loaded');
}

var script = new Element(
    'script', {
        type: 'text/javascript',
        src: 'http://maps.googleapis.com/maps/api/js?key=' 
            + Map.API_KEY
            + '&sensor=false&callback=onMapLoad'
    }
);

document.body.appendChild(script);

グローバル関数は使いたくない。代わりに、シングルトンでメソッドを呼び出したいと思いますMap.instance().onLoaded

// ...
+ '&sensor=false&callback=Map.instance().onLoaded'
// ...

これを行おうとすると、NetworkError:403Googleのスクリプトの読み込みが禁止されています。これは、Googleのサービスが私のコールバック関数文字列を気に入らなかったことを意味しているようです。コールバック関数自体に問題はありません。

4

2 に答える 2

0

Googleは()コールバック文字列の関数呼び出し部分を好まないようですが、ドキュメント上でグローバルではないという事実に問題はありません。

私もこれで403を取得します:

http://maps.googleapis.com/maps/api/js?key=4&sensor=false&callback=Map.mapLoaded%28%29

しかし、これではありません:

http://maps.googleapis.com/maps/api/js?key=4&sensor=false&callback=Map.instance.mapLoaded

関数の戻り値の代わりに、コールバックのMapオブジェクトの関数プロパティを指定できればinstance()、余分なグローバルを回避できるようです。私は彼らのAPIでこれに関して何も見ませんでしたが、私はそれを調べるのにそれほど長い時間を費やしませんでした。


私は長い間JSONP戦術を使用する必要がなかったので、これがコールバックをグローバルにする必要があるJSONPの制限なのか、それともGoogleが課しているものなのかわかりませんでした。このJSONPテストサイトは、応答とフィドルが示すように、親に問題がないように見えるので、これはGoogleだけのもののようです。

http://date.jsontest.com/?callback=Map.foo%28%29

フィドル: http: //jsfiddle.net/6WawP/

お役に立てれば

于 2012-10-04T04:40:50.183 に答える
0

グーグルローダー呼び出しを使用してみてください

<script type="text/javascript" src="https://www.google.com/jsapi"></script>

google.load("maps", "3", {"other_params": "sensor=false","callback" : Map.instance().onLoaded });

https://developers.google.com/loader/

于 2012-10-06T06:59:49.363 に答える