Google Maps API v3.19 在 Internet Explorer Quirks Mode 中损坏

IT技术 javascript google-maps
2021-03-20 05:36:35

Google Maps API 3.19 版于 2015 年 2 月 17 日成为默认地图“发布”(请参阅https://code.google.com/p/gmaps-api-issues/wiki/JavascriptMapsAPIv3Changelog)。使用quirks mode 时该版本似乎会导致 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 链接是最新的信息来源。这种差异让我感到困惑,所以我认为值得分享观察结果。


15 年 2 月 20 日更新:

昨天谷歌确认这是一个错误 - 请参阅https://code.google.com/p/gmaps-api-issues/issues/detail?id=7675 - 并建议“我们正在研究修复”。

感谢您的意见和建议,但到目前为止,我还没有找到一种解决方法,使我的应用程序能够完全工作,因为其他页面组件依赖于怪癖模式,创建了大量工作以使整个事情再次工作. 我希望谷歌的关注能为我解决这个问题。


15 年 2 月 21 日更新:

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

6个回答

今天在我刚刚继承的一个网络应用程序中发现了同样的问题。出于某种原因,以前的开发人员强迫 IE 进入 quirks (ie7) 模式,而 google api 问题从今天开始。我已经更新了主 html 页面以使用 IE 边缘模式,方法是将 html head 部分从

<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-edge meta... 行)

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

现在找出为什么以前的开发人员强制使用 IE7 模式....

我注意到当我设置 content="IE=edge" 时,缩放按钮已经从地图上消失了。你知道为什么吗?
2021-04-26 05:36:35
谢谢你..... 我知道在 SO 上说“谢谢”不是协议......但我刚刚花了 2 个多小时试图弄清楚为什么脚本在 Delphi TWebBrowser 中不起作用但工作正常在标准浏览器中(包括 IE!)。
2021-04-27 05:36:35
这在我的情况下有效,它是 Delphi 项目中的嵌入式 TWebBrowser。
2021-05-13 05:36:35

已解决:与 IE8 (XP)、IE9 (Win7) 和 Win 7 和 XP 中的兼容模式有相同的问题。我添加了版本号,瞧!固定的。

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

指定v=3强制稳定版本。我没有这个版本标志的旧代码被谷歌解释为我想要我的生产服务器永远不需要的实验版本。

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

我们正在使用 GMLib Google Maps delphi 组件,我们遇到了同样的问题。GMLib 组件内部使用了 TWebBrowser 组件。

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

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

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

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

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

此外,您可以v=3.19在 Google 地图 URL 中使用。我怀疑商业组件在这里会做得更好。
2021-05-14 05:36:35

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

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