gpt4 book ai didi

javascript - Google 地球气球重新加载 - 客户端和插件

转载 作者:行者123 更新时间:2023-11-28 08:58:44 25 4
gpt4 key购买 nike

在回答我的实际问题之前先说一点题外话:

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

setTimeout(window.location.reload, 250);

我有一个理论,认为这会起作用,因为在 Google 地球应用程序(客户端和插件版本)中,我可以右键单击气球并单击“重新加载”,气球会按照我想要的方式调整其大小。显然,这个黑客有点可疑,考虑到如果我在普通浏览器中使用相同的代码,页面只会无限地重新加载,所以我还必须找到一种方法来确定我是在 Google Bubble 还是在浏览器中该网页的版本(我找到了一种方法,但它与我最终要解决的问题并不重要或相关)。现在办公室里的事情不再那么困惑了,我想弄清楚为什么会这样。

最后,我的问题是:Google Earth API 是否重新定义了窗口或位置对象,或者只是重新定义了 window.location.reload 的工作方式?

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

最佳答案

does the Google Earth API redefine the Window or Location Objects, or does it just redefine how window.location.reload works?

不,它不会重新定义任何东西,它只是页面框架内的插件。基本上如果你在一个框架内window指当前帧,parent指当前帧的父帧和 top指窗口层次结构中最顶层的窗口。

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

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

但是,一旦插件加载,如果您查看页面的标记,您可以看到插件将 iframe 注入(inject)到该元素中。所以你有类似的东西......

<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(); 以显示差异。

Obviously there is something a bit fishy about this hack

根本没有什么可疑的地方,这是基本的标记。您所做的只是告诉当前的框架而不是最上面的窗口重新加载。

关于javascript - Google 地球气球重新加载 - 客户端和插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18069005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com