在我开始我的实际问题之前,先说一句:
几个月前,我遇到了一个问题,当我收到AJAX调用时(大约每分钟两次),我需要通过javascript动态调整Google Earth气球的大小。有时,每次调用只需要将气球增加一到两个像素,这并不是一个大问题。主要的问题是,有些时候(很多时候),我得到的数据会要求气球变得更大,这会导致滚动条出现(对我工作的公司来说,这是一个不受欢迎的影响)。最终,在几天的时间里,我发现了一种非常老套的方法,可以让气球按我想要的方式调整大小。在获得我的数据并用新数据重新填充气球后,我将调用以下代码:
setTimeout(window.location.reload, 250);我有一个理论,这是因为在Google Earth应用程序(客户端和插件版本)中,我可以右键单击气球,然后单击“重新加载”,气球就会按我想要的方式调整大小。显然,考虑到如果我在普通浏览器中使用相同的代码,页面会无限地重新加载,所以我还必须找出一种方法来确定我是在Google Bubble中还是在这个网页的浏览器版本中(我找到了一种方法,但它与我最终要访问的问题并不重要或无关)。现在办公室里的事情不那么混乱了,我想找出这到底是为什么。
最后,我的问题是: Google Earth API是重新定义了窗口或位置对象,还是仅仅重新定义了window.location.reload的工作方式?
我使用的是Google Earth Client v6.1.0.5001和Google Earth插件v6.2.2.6613
发布于 2013-08-06 20:27:53
Google Earth API是重新定义了窗口或位置对象,还是仅仅重新定义了window.location.reload的工作方式?
不,它不会重新定义任何东西,它只是页面框架内的插件。基本上,如果您在一个帧内,window指的是当前帧,parent指的是当前帧的父窗口,top指的是窗口层次中最顶层的窗口。
当您第一次加载插件时,通常将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去重新加载。
https://stackoverflow.com/questions/18069005
复制相似问题