在我得到实际问题之前,请稍等一下:
几个月前,我遇到了一个问题,我需要通过javascript动态调整Google地球气球的大小,因为我收到了AJAX电话(大约两分钟)。有时每次调用只需要将气球增加一到两个像素,这不是一个大问题。主要的问题是一些(很多)时间,我回来的数据会要求气球大得多,导致滚动条出现(这对我工作的公司来说是一个不良影响)。最后,在将代码抛出数天之后,我找到了一种非常好的方式让气球按照我想要的方式调整大小。在获取我的数据并使用新数据重新填充气球后,我会称之为:
setTimeout(window.location.reload, 250);
我有一个理论认为这可以在谷歌地球应用程序(客户端和插件版本)中工作,我可以右键单击气球并单击“重新加载”,然后气球按照我想要的方式调整大小。考虑到我是否在普通浏览器中使用相同的代码,页面只会无限重新加载,显然这个hack有点可疑,所以我还必须找出一种方法来确定我是在Google Bubble还是在浏览器中这个网页的版本(我找到了一种方式,但这与我最终得到的问题并不重要或相关)。现在办公室周围的事情变得不那么混乱了,我想知道为什么会这样做。
最后,我的问题是:Google Earth API是重新定义Window还是Location Objects,还是重新定义了window.location.reload的工作原理?
我使用的是Google地球客户端v6.1.0.5001和Google地球插件v6.2.2.6613
答案 0 :(得分:0)
Google Earth API是否重新定义了窗口或位置对象,或 它只是重新定义了window.location.reload的工作原理吗?
不,它不会重新定义任何内容,它只是页面框架内的插件。基本上,如果你在一个框架内window指向当前框架,parent指的是当前框架的父框架,top指的是窗口层次结构中最顶层的窗口。
首次加载插件时,通常会将createInstance
方法指向页面上的div
或其他元素。 e.g。
<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
重新加载。