1

実際の質問に入る前に、少し余談です。

数か月前、AJAX 呼び出し (1 分間に約 2 回) を受信したときに、javascript を使用して Google Earth バルーンのサイズを動的に変更する必要があるという問題に直面しました。場合によっては、呼び出しごとにバルーンを 1 ~ 2 ピクセル増やすだけで済みますが、これは大きな問題ではありませんでした。主な問題は、(多くの場合) 返されるデータでは、バルーンをはるかに大きくする必要があり、スクロールバーが表示されることでした (私が働いている会社にとっては望ましくない影響です)。何日もコードを投げた後、最終的に、気球を思い通りにサイズ変更するためのかなりハックな方法を見つけました。データを取得し、バルーンに新しいデータを補充した後、次のように呼び出します。

setTimeout(window.location.reload, 250);

Google Earth アプリケーション (クライアント バージョンとプラグイン バージョン) 内で、バルーンを右クリックして [再読み込み] をクリックすると、バルーンのサイズを希望どおりに変更できるため、これが機能するという理論がありました。通常のブラウザで同じコードを使用すると、ページが無限にリロードされるだけであることを考えると、明らかにこのハックには少し怪しいものがあります。このWebページのバージョン(これは方法を見つけましたが、最終的に到達する私の質問には重要でも関連性もありません)。オフィスの混乱が少し和らいだ今、なぜこれが機能するのかを正確に知りたい.

最後に、私の質問は次のとおりです。Google Earth API は Window または Location オブジェクトを再定義しますか、それとも window.location.reload の動作を再定義するだけですか?

Google Earth クライアント v6.1.0.5001 と Google Earth プラグイン v6.2.2.6613 を使用しています。

4

1 に答える 1

0

Google Earth API は Window または Location オブジェクトを再定義しますか、それとも window.location.reload の動作を再定義するだけですか?

いいえ、何も再定義しません。ページのフレーム内のプラグインです。基本的に、フレーム内にいる場合、windowは現在のフレームを参照し、parent は現在のフレームの親を参照し、 topはウィンドウ階層の最上位のウィンドウを参照します。

プラグインを最初にロードするときは、通常、createInstanceメソッドをdivページ上の 1 つまたは他の要素に向けます。例えば

<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リロードを単に指示することだけです。

于 2013-08-06T12:27:53.197 に答える