【问题标题】:How/Where can I read a value to tell when my Google Maps API V3 map has completed rendering?如何/在哪里可以读取值来判断我的 Google Maps API V3 地图何时完成渲染?
【发布时间】:2023-03-21 20:47:01
【问题描述】:

我有一个使用更新的 Google Maps API V3 从 Perl 脚本创建的 Google Map。该脚本根据从父页面中的隐藏表单字段传递给它的值构建地图,并将地图返回到同一父页面中的 iframe。

地图在 iframe 中的原因是,我在尝试将地图直接渲染到父页面上的 div 时发现了 Firefox 和 IE 的浏览器问题。当地图以其他方式渲染到 iframe 窗口中时,不会发生这种情况。我得出的结论是,这是因为新的 Google Maps API V3 在解释 CSS 继承的方式上有些古怪,并且或多或少要求将地图呈现为宽度和高度均为 100% 值的块元素。通过将 iframe 窗口渲染到 div 中,我可以通过 div 的 CSS 控制我想要的大小,同时通过 iframe 文档为 Google Maps API 提供 100% 的宽度和高度值。

这最初是因为我真的希望地图在隐藏的 div 中呈现,当用户单击地图链接时,它可以通过 jQuery 显示。但是,这在 Firefox 或 IE 中都不起作用,并且地图无法在初始 CSS 显示属性设置为 none 的元素中呈现。这甚至在尝试使用外部 div 包装器时都不起作用,它应该继承该包装器 div 的值。

所以现在我有一个解决方法,其中 div 最初没有隐藏,iframe 显示,地图构建完美,然后将 setTimeout 事件写入 iframe 页面,然后关闭 div 以隐藏父页面上的地图。我知道,我知道,这很 hack,但它确实允许地图正确渲染,然后将其隐藏起来。

所以我在这里寻找的是一种告诉地图何时完成渲染以启动 jQuery 事件以隐藏 div 的方法,而不是当前正在使用的 setTimeout 方法(这也不能保证地图真的已经完成了渲染。这充其量只是一个很好的定时猜测)。

我搜索了 Google Maps API V3 文档,并在网络上的其他地方查看了是否有某种方法可以判断地图何时完成渲染但没有成功,我希望有人熟悉新的 Google Maps API可能有我寻求的答案,至少可以让这个变通方法更优雅一点:)

感谢您为我提供的任何指导,以实现我在这里想要实现的目标。

【问题讨论】:

    标签: jquery perl google-maps google-maps-api-3


    【解决方案1】:

    如何使用绝对定位将 iframe 移出屏幕然后你不需要隐藏它...

    顺便说一句,我没有看到您在使用 V3 的工作中描述的任何问题,所以也许它们只是您代码中其他问题的副作用。

    【讨论】:

    • @Tobi。将 iframe 移出屏幕无济于事,因为 iframe 所在的 div 有一个维度,所以我只会留下一个空白背景空间,其尺寸与 iframe 的包含 div 相同。这一切的奇怪之处在于,在 iframe 第一次渲染后,您可以毫无问题地隐藏和显示 div。顺便说一句...此页面代码的唯一问题是该死的已弃用 frameBorder 属性,我必须使用该属性才能在 IE 中获得不稳定的插入 iframe 边框...否则它会被验证为完美。
    • @Tobi。如果您确实有答案,并且告诉我您有办法在 div 中渲染地图,并将初始显示值设置为 none,然后发布一个工作示例……我会给您投票。如果您观察了我发布的示例页面,则包含 div 的功能必须与用于显示和隐藏 div 的切换类型动画一起使用,以匹配联系人表单和标记广告表单的操作,这些表单也以这种方式工作页。所以地图必须以相同的方式工作以保持一致性。
    • 至于没有问题,我的意思是我还没有在我的任何 v3 工作中使用 iframe ...
    • 对于使用屏幕外 div,一旦页面加载,就使用 jquery 操作其 css 属性。那么它就不会占用任何空间......
    • @Tobi。我将 iframe 用于地图的原因是因为它是网站的第三方服务。这允许我自己的页面始终完成渲染,即使谷歌地图陷入困境或离线。通过在 iframe 中包含 Google Maps,我自己的页面和 Google Maps 都有自己的文档树,它们实际上彼此独立运行。通过这种方式,最坏的情况是 iframe 得到 404,而 iframe 所在的页面在通常的时间内完成渲染。
    【解决方案2】:

    据我所知,没有办法,因为浏览器不会通过 JavaScript 公开此功能。

    如果您只想知道平铺图像是否已加载,请监听 tilesloaded 事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 2014-07-03
      相关资源
      最近更新 更多