实际上,除了实例化map对象的行之外,一切都很好。
const map = new window.Microsoft.Map(document.getElementById("bingMap"), { ^^^^^^^^^^^^^^^^^^^^ credentials: API_KEY });
这里有拼写错误, Map 类 宣布在 Microsoft.Maps 命名空间 但是 的 不 强> 下 Microsoft 您的示例中的命名空间,这就是发生指定错误的原因:
Map
Microsoft.Maps
Microsoft
TypeError:window.Microsoft.Map不是构造函数
我不知道为什么以前的代码不起作用。即使在运行createMap()函数之前设置超时5秒之后,Microsoft对象仍然不可用。如果有人能够提供见解,我们将非常感激。但解决方案是将回调包装在一个承诺中。
import "./styles.css"; let initializedPromise = null //insert div element into DOM const mapDiv = document.createElement("div"); mapDiv.id = "bingMap"; mapDiv.setAttribute("style", "position:relative;width:600px;height:400px;"); document.body.appendChild(mapDiv); const insertBingScriptIntoDom = () => { const bingScript = document.createElement("script"); bingScript.type = "text/javascript"; bingScript.src = "https://www.bing.com/api/maps/mapcontrol?callback=onLoadApi; document.body.appendChild(bingScript); }; const initApi = () => { if (!initializedPromise) { initializedPromise = new Promise((resolve, reject) => { window.onLoadApi = () => { resolve() } }) insertBingScriptIntoDom() } return initializedPromise } const createMap = async () => { await initApi() new window.Microsoft.Maps.Map(mapDiv, { credentials: <API KEY>, center: window.Microsoft.Maps.Location(41.6, 2.9) }) } createMap()