在Chrome和Firefox中声明DOCTYPE时,Google Map API无效

时间:2012-01-31 13:48:16

标签: javascript google-maps-api-3 javascript-objects

我有这个奇怪的问题,当我声明DOCTYPE时,我的Google Maps API脚本无效,没有地图呈现

如果没有DOCTYPE,我会收到以下警告,但它可以正常工作并且地图已呈现

  

资源被解释为其他资源,但传输的MIME类型未定义。

我对错误没有任何真正的线索,但我希望这里可能会有一些问题!

在这里,您可以看到没有DOCTYPE的脚本:
[自问题解答后删除的链接]

...这里是DOCTYPE声明为HTML5:
[自问题解答后删除的链接]

JavaScript源代码很长,但你可以在这里找到它:
[自问题解答后删除的链接]
但是如果有人关心的话,我已经在http://snipt.org/yZgm2公开发布了它!

感谢您的时间!

更新1:

所以,似乎我的JavaScript不是问题。但是div元素没有高度或宽度开始,并且由于某种原因,无论是否有DOCTYPE,它都有不同的作用。

这么新的问题!

为什么在声明DOCTYPE后,以下代码部分无效?

var mapElement = document.getElementById(mapOptions['mapid']);
mapElement.style.width=mapOptions['width'];
mapElement.style.height=mapOptions['height'];

更新2:

感谢@fivedigit和@duncan指出了CSS问题。只需添加测量单元即可解决所有问题!

mapElement.style.width=mapOptions['width']+'px';
mapElement.style.height=mapOptions['height']+'px';

2 个答案:

答案 0 :(得分:6)

不同之处在于doctype声明使浏览器进入标准模式,而不是quirks模式。这就是你的JavaScript中的一个小错误的地方。

在两个实例中都创建了地图,但是当声明了doctype时,地图的高度为0,宽度设置为默认值(100%)。

您可以使用以下代码来设置地图的宽度和高度:

if(mapOptions['width'] !== false){
    mapElement.style.width=mapOptions['width'];
}
if(mapOptions['height'] !== false){
    mapElement.style.height=mapOptions['height'];
}

您忘了在那里指定单位,在标准模式下,该样式规则将被删除。将代码更改为此以使其工作:

if(mapOptions['width'] !== false){
    mapElement.style.width=mapOptions['width'] + 'px';
}
if(mapOptions['height'] !== false){
    mapElement.style.height=mapOptions['height'] + 'px';
}

答案 1 :(得分:4)

你可能需要为地图所在的div做一些关于CSS的事情。尝试添加这样的东西:

<style type="text/css">
html { height: 100% }
body { height: 100%; margin: 0; padding: 0 }
#map1 { height: 100% }
</style>