谷歌地图API v3.19在Internet Explorer Quirks模式下损坏

Google Maps API v3.19 Broken in Internet Explorer Quirks Mode

本文关键字:Quirks 模式 损坏 Explorer Internet API v3 谷歌地图      更新时间:2024-01-26

谷歌地图API 3.19版于2015年2月17日成为默认地图"发布版"(请参见https://code.google.com/p/gmaps-api-issues/wiki/JavascriptMapsAPIv3Changelog)。当使用怪癖模式时,该版本似乎会在Internet Explorer中引发问题,正如我从受此问题影响的应用程序中生成的以下测试页所示(因此,这可能包括比此处所需更多的代码):

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Google Maps Test Page</title>
</head>
<body style="margin:0; padding:0">
    <!-- Adding ?v=3.18 onto the end of this URL will 'fix' the problem -->
    <script src='http://maps.googleapis.com/maps/api/js' type='text/javascript'></script>
    <script type='text/javascript'>
    function initialize() {
        top.google.maps.visualRefresh=true;
        var mapOptions = {
            zoom: 13,
            center: new google.maps.LatLng(51.5072, 0.1275),
            mapTypeId: google.maps.MapTypeId.ROADMAP,
            scaleControl: true,
            overviewMapControl: true
        };
        this._map = new google.maps.Map(document.getElementById('myMap'), mapOptions);  
    }
    google.maps.event.addDomListener(window, 'load', initialize);
    </script>
    <div id="myMap" style="width:500px;height:500px;position:relative;"></div>
 </body>
 </html>

Firefox和Chrome都将正确显示可用地图,而IE在谷歌地图代码中引发了一个错误,错误内容为"无法获取显示属性"。无效参数。'我试过调试代码,但它被混淆了,这是一个痛苦的挑战。

强制版本恢复到上一个"冻结"版本(3.18)暂时解决了这个问题,但这只是一个临时解决方案。

除了向谷歌报告这件事并希望他们解决之外,还有人能提出解决方案吗?


附加说明:

在我写的时候,我注意到这里的信息https://code.google.com/p/gmaps-api-issues/wiki/JavascriptMapsAPIv3Changelog说发布的是:

Experimental: 3.20
Release: 3.19
Frozen: 3.18 

3.17版将被删除。3.17或任何先前版本的请求现在将提供3.18'版本

当此页面https://developers.google.com/maps/documentation/javascript/basics#Versioning(在页面底部):

Version 3.18 Reference (Release)
Version 3.19 Reference (Experimental)
Version 3.17 Reference (Frozen)
Versions 3.0 - 3.16 have been retired.

这相当令人困惑,但我认为Changelog链接是最新的信息来源。这种差异让我感到困惑,所以我认为值得分享这一观察结果。


2015年2月20日更新:

昨天谷歌确认这是一个错误-请参阅https://code.google.com/p/gmaps-api-issues/issues/detail?id=7675-并建议"我们正在寻找解决方案。"

感谢您的评论和建议,但到目前为止,我还没能找到一个解决方案,让我的应用程序能够完全工作,因为其他页面组件都依赖于怪癖模式,创造了大量的工作来让整个事情重新工作起来。我希望谷歌的关注能为我解决这个问题


2015年2月21日更新:

https://code.google.com/p/gmaps-api-issues/issues/detail?id=7675现在表示"将在下周部署修复程序。"

今天在我刚刚继承的一个web应用程序中发现了同样的问题。出于某种原因,之前的开发者迫使IE进入怪癖(ie7)模式,谷歌api问题从今天开始。我已经更新了主html页面,通过从更改html头部来使用IE边缘模式

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
 <head>
    <meta http-equiv="X-UA-Compatible" content="IE=7" /> 
 .....

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
 <head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
.....

(如果你错过了它,请添加ie边缘元…行)

到目前为止,它已经修复了它。

现在来了解一下为什么以前的开发人员强制使用IE7模式。。。。

已解决:在IE8(XP)、IE9(Win7)以及Win7和XP中的兼容模式方面存在相同问题。我加了版本号,瞧!固定的

http://maps.googleapis.com/maps/api/js?v=3&key=。。。

指定v=3将强制稳定释放。我没有这个版本标志的旧代码被谷歌解释为我想要的是实验版本,而我的生产服务器从来都不想要这个版本。

仅供参考,我使用<!DOCTYPE HTML PUBLIC"//W3C//DTD HTML 4.01过渡//EN">

我们使用的是GMLib谷歌地图delphi组件,我们也遇到了同样的问题。GMLib组件在内部使用TWebBrowser组件。

在GMLib组件的资源文件中,我们发现了一个map.html文件。我们在html文件的部分添加了以下行。

<meta http-equiv="X-UA-Compatible" content="IE=edge" />

然后,我们将资源文件重新编译到组件中,重新编译delphi项目,它就工作了。

我想这是使用相对不受支持的自由组件的缺点之一。

我们现在正在考虑转向谷歌地图的商业付费组件,以降低这种情况再次发生的风险。

在我的情况下(集成了Web浏览器的.net 4 visual c#),为了解决这个问题,我只添加了&v=3似乎如果你不指定版本,它将使用实验版本。。。奇怪的

我在Delphi中有一个使用TWebBroser的应用程序,这是我找到的临时解决方案,但不是100%因为要解决这个问题,我必须在Windows上使用regedit添加一个密钥。强制IE在版本中进行模拟了解我创建的密钥,为了更好地理解,请查看其中的项目Browser Emulation链接https://msdn.microsoft.com/en-us/library/ee330730(v=vs.85).aspx。此解决方案仅在安装了密钥中所述的IE版本时有效。

我们在使用标准.net WebBrowser控件的C#程序中也遇到了同样的问题。

我们还通过添加线路解决了这个问题

<meta http-equiv="X-UA-Compatible" content="IE=edge" />

请注意,它在使用Internet Explorer 7的Vista配置上不起作用,但在安装IE 9后仍然可以(安装Service pack 1、Service pack 2、2个microsoft更正补丁以及IE9本身的时间超过3个小时)。

我很高兴地说,谷歌以非常积极的方式回应了这个问题;他们很快将其归类为一个bug,并告知他们正在处理它,今天我再次进行测试,发现"怪癖"问题不再存在,我的应用程序再次正常运行。

我问的问题是"除了向谷歌报告这件事,还有人能提出解决方案并希望他们解决吗?"。我看到这个问题的应用程序(显然)严重依赖于怪癖模式,因此当我试图消除这种依赖时,我看到页面上的其他组件出现了许多问题,即问题变得更大了。因此,谷歌解决这个问题确实是唯一对我有效的答案,我很高兴他们做到了。

感谢大家的帮助和贡献。

在我的情况下,IE 11没有响应谷歌地图。。。。我的解决方案是:第一点:

添加标题:

第二点:

添加JS V3:

关注

这很好

< script src="https://maps.googleapis.com/maps/api/js&v=3.18" type="text/javascript"></script>

这不是

< script type="text/javascript" src="https://maps.googleapis.com/maps/api/js&v=3.18"</script>