谷歌地球气球重新加载-客户端和插件



在我开始我的实际问题之前有一点旁白:

几个月前,我遇到了一个问题,当我收到AJAX调用时,我需要通过javascript动态调整Google Earth Balloon的大小(大约每分钟两次)。有时,每次调用只需要将气球增加一两个像素,这并不是一个大问题。主要的问题是,在某些时候(很多时候),我得到的数据会要求气球大得多,这会导致出现滚动条(这对我工作的公司来说是一种不良影响)。最终,在向它抛出代码几天后,我找到了一种非常巧妙的方法,可以让气球按照我想要的方式调整大小。在获得我的数据并用新数据填充气球后,我会称之为:

setTimeout(window.location.reload, 250);

我有一个理论认为这是可行的,因为在谷歌地球应用程序(客户端和插件版本)中,我可以右键单击气球并单击"重新加载",气球会按照我想要的方式调整大小。显然,考虑到如果我在普通浏览器中使用相同的代码,页面会无限地重新加载,所以我还必须想办法确定我是在谷歌泡泡还是在这个网页的浏览器版本中(我找到了一种方法,但这对我最终要回答的问题并不重要或相关)。现在办公室里的事情不那么混乱了,我想弄清楚这到底是为什么。

最后,我的问题是:Google Earth API是重新定义了窗口或定位对象,还是只是重新定义了Window.Location.reload的工作方式?

我使用的是谷歌地球客户端v6.1.0.5001和谷歌地球插件v6.2.2.6613

Google Earth API是否重新定义了窗口或定位对象,或者它只是重新定义了window.location.reload的工作方式吗?

不,它没有重新定义任何东西,它只是页面框架内的插件。基本上,如果您在一个框架内,则窗口指的是当前框架,父窗口指当前框架的父窗口,顶部指的是窗口层次结构中最顶部的窗口。

当您第一次加载插件时,通常会将createInstance方法指向页面上的div或其他元素。例如

<div id='map3d'></div>

然而,一旦插件加载,如果你查看页面的标记,你可以看到插件将iframe注入到该元素中。所以你有这样的东西。。。

<div id='map3d' style='...'>
  <div style='...'>
    <div style='...'>
      <iframe src="http://www.google.com/earth/plugin/..">
        <html>
          ...

因此,当您引用window对象时,您指的是该帧,而不是父窗口。

尝试调用window.top.location.reload();window.location.reload();以显示差异。

显然,这个黑客有点可疑

没有什么可疑的事情发生,这是基本的标记。您所做的只是简单地告诉当前的frame,而不是最上面的window重新加载。

最新更新