3

Bing Map APIスクリプトを動的にロードしています。スクリプトの読み込みが完了したら、マップを作成したいと思います。問題は定義されていますが、定義されていMicrosoftません。彼らのスクリプトはより多くのスクリプトを非同期的にロードすることを認識していますが、これらの追加の仮想スクリプトを 10 秒待った後でも、未定義のままです。では、どうすればクラスをロードできますか? クラスを明示的にロードするexampleには何も表示されません。Microsoft.MapsMicrosoft.Maps.MapMicrosoft.Maps.MapMap

Javascript (プロトタイプ フレームワーク):

var script = new Element(
    'script', {
        type: 'text/javascript',
        src: 'http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0'
    }
);

script.observe(
    'load',
    function(event) {
        console.info(Microsoft);
        console.info(Microsoft.Maps);
        console.info(Microsoft.Maps.Map);
    }
);

document.body.appendChild(script);

コンソール出力:

>>>  Microsoft
Object { Maps={...}}
>>>  Microsoft.Maps
Object { Globals={...}}
>>>  Microsoft.Maps.Map
undefined
4

2 に答える 2

2

cbayram は、あなたが見ているのが早すぎるのは正しいです。ただし、具体的には、スクリプトの読み込みが完了したら (onscriptload)、スクリプトを起動する Bing Map 固有の方法を使用していません。グローバル関数は避けていますが、ここでは実際に使用する必要があります。

これを試して:

var script = new Element(
    'script', {
        type: 'text/javascript',
        src: 'http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0&onscriptload=DrawMap'
    }
);

function DrawMap() {
   console.info(Microsoft);
   console.info(Microsoft.Maps);
   console.info(Microsoft.Maps.Map);
}

document.body.appendChild(script);

重要ではありませんが、なぜ body に追加するのですか? 私はいつもそれを頭に追加します。

于 2012-10-21T23:20:32.243 に答える
0

BING Map API の JavaScript ファイルは、追加の JS および CSS ファイルをページに動的にロード/挿入します。

<script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/v7.0/7.0.20121012100453.93/js/en-us/veapicore.js">
<script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/v7.0/7.0.20121012100453.93/js/en-us/veapidelay.js">
<link rel="stylesheet" type="text/css" rev="stylesheet" href="http://ecn.dev.virtualearth.net/mapcontrol/v7.0/7.0.20121012100453.93/css/en/mapdelay.css">
<link rel="stylesheet" type="text/css" rev="stylesheet" href="http://ecn.dev.virtualearth.net/mapcontrol/v7.0/7.0.20121012100453.93/css/en/mapcontrol.css">
<script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/v7.0/7.0.20121012100453.93/js/en-us/veapiAnalytics.js"> 

Map関数/オブジェクトはで作成されているようです

http://ecn.dev.virtualearth.net/mapcontrol/v7.0/7.0.20121012100453.93/js/en-us/veapicore.js

編集:

script.observe は、ロードされる最初の (最初の) JS ファイルで実行されます。Map 関数は veapicore.js でインスタンス化され、その後最初の mapcontrol.ashx?v=7.0 によって読み込まれるため、時期尚早です。その Map オブジェクトを探すには時期尚早です。

于 2012-10-19T23:50:16.977 に答える