7

Firefoxの拡張機能を書いています。XUL + Javascript(XPCOMなし)だけに制限しようとしています。HTML要素のイベントを取得するときmouseoverは、Windows座標系(組み込みのXULドキュメントbrowser.xul)でその境界ボックスを取得する必要があります。

開始するための明白な場所は、マウスオーバーイベントハンドラーに次のようなものを置くことです。

var rect = e.target.getBoundingClientRect();

これは素晴らしいことですが、HTML描画領域の左上隅を基準にしたHTMLドキュメントの座標系の四角形が得られます。この画像の近くにpanel.openPopup()を使用してxul:panel要素を表示したいので(ただし、事前定義されたポップアップ位置の1つは使用しません)、座標を変換する必要があります。

私は(XUL domで)次のことを実行して、変換を行うためのオフセットを取得しようとしました。これは一部のサイトで機能しますが、すべてではなく、サイドバーに必要なx変換を考慮していないようです。

var appcontent = document.getElementById("appcontent");
if (appcontent) {
  chromeOffsetX = r.left;
  chromeOffsetY = r.top;
}

それで、これにアプローチするための最良の方法は何ですか?

注:IE拡張機能の場合、 IDisplayServices :: TransformRect()を使用します(使用しました) — Firefoxに似たものはありますか?

今、賞金があります!

4

2 に答える 2

0

この質問には、表示されているウィンドウを基準にして要素のxとyを計算するコードが含まれています。それがあなたの質問に答えるかどうかわからない。

于 2010-07-22T20:31:14.947 に答える
0

次のようなものを使用して要素に対してアイテムを配置できるため、場所の取得は無関係であることがわかります。

hoverPanel.openPopup(someElement, "overlap", offsetX, offsetY, false, false);
于 2010-07-23T17:08:39.460 に答える