簡體   English   中英

加載他們的javascript文件后,Bing地圖未定義

[英]Bing maps is undefined after loading their javascript file

我正在動態加載Bing Map API腳本。 當腳本完成加載時,我想構建我的地圖。 問題是MicrosoftMicrosoft.Maps是定義的,但Microsoft.Maps.Map不是。 我意識到他們的腳本會異步加載更多的腳本,但即使等待10秒后這些額外的假設腳本, Microsoft.Maps.Map仍然是未定義的。 那么如何加載他們的Map類呢? 我在他們的示例中看不到任何明確加載類的內容。

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

cbayram是對的,你看得太早。 但具體來說,一旦你的腳本完成加載(onscriptload),你就不會使用Bing Map特定的方法來觸發你的腳本。 我們避免全局功能,但AFAIK你真的需要在這里使用它。

嘗試這個:

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);

不重要,但為什么要將它附加到身體上? 我總是追上它。

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對象時太早。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM