ページが次のように構成されていると仮定します。
- ルートウィンドウ(つまり、ブラウザウィンドウ、#ID = ROOT)
- フレーム(フレームセットまたはiframe、#ID = 1)
- フレーム(フレームセットまたはiframe、#ID = 2)
私の理解では、ポップアップ(ツールチップはおそらく?)をROOTにレンダリングしたいのですが、1または2の関連要素に基づいてポップアップを配置します。これは、ROOTで行われる配置は、明らかにROOTの配置に関連するため、課題となります。サブフレームではありません。従うべきガイドラインは、おそらく次のようなものかもしれません。
- 要素を含むウィンドウに対する要素の(#ID = ELEM)絶対位置を取得します。
- ROOTへの参照を取得し、ROOTのコンテキストでポップアップポジショニングを実行します。
- ROOTのコンテキストになり、ELEMの絶対位置がわかったので、位置を変更して、ROOTのコンテキスト内にELEMを含むフレームの絶対位置を含め、ポップアップをその新しい位置にレンダリングします。
jQueryを使用したいくつかのコードガイドライン:
// executing within the context of 1.2:
// get the element to which the popup relates
var ELEM = $("#ELEM");
// get the root window, i.e. ROOT
var ROOT = (function () {
var r = window;
while ($("#SOME-UNIQUE-ELEMENT-ON-ROOT", r).length == 0) {
r = r.parent;
}
return r;
})();
// get ELEM's current absolute position in relation to 1.2
var top = ELEM.position().top;
var left = ELEM.position().left;
// get the current document's containing element in relation to ROOT
var C = $((document.parentWindow || document.defaultView).frameElement.parentNode);
// modify ELEM's position to compensate for the absolute position of C on ROOT
top += C.position().top;
left += C.position.left;
ROOTでポップアップをレンダリングする新しい絶対位置ができたので、新しい「上」と「左」の座標を使用してレンダリングエンジンを呼び出します。
それがまったく意味をなさないことを願っています...