Firefox で CTRL-f を使用して見つかったテキストの最上位 X ウィンドウ座標をプログラムで決定する必要があります。たとえば、次のシーケンスから始めます。
- Linux で Firefox を開きます (MS Windows はここでは関係ありません)。
- いくつかの Web ページを参照します。
- CTRL-f を入力して、ページに存在するテキスト「foo」の検索を開始します。
- Firefox は期待どおりにテキストを強調表示します。
- ページの下部にある検索ツールバーを削除するエスケープ キーを入力します。
ここで、スクラッチパッド (Shift-F4) を開き、強調表示/選択されているテキストの左上の点の X 座標と Y 座標をコンソールに出力する JavaScript を入力します (再び、明確にするために、座標はトップレベルの X ウィンドウ座標である必要があります)。座標は、最上位の X ウィンドウ (Firefox ウィンドウ) を基準とした座標に変換する必要があります。
Selenium などの Firefox 拡張機能をインストールせず、そのままの JavaScript を使用することをお勧めします。また、ロードされて表示されているページのコンテンツを、可能であれば変更したくありません。
選択したテキストと xy 座標の質問はこれに似ているようです。このwindow.getSelection()
メソッドはテキスト文字列を返しますが、X ウィンドウ上にある文字列の X 座標と Y 座標を特に探しています。
編集 #1: http://javascript.info/tutorial/coordinatesで指定された「ウィンドウ座標」は、トップレベルの X ウィンドウ座標と同じではないことに注意してください。この質問に対する実行可能な答えには、要素またはノード座標からトップレベルの X ウィンドウ座標に変換するための完全なアフィン変換 JavaScript コードが含まれます ( http://javascript.info/で指定された「ウィンドウ座標」への中間変換を意味する場合でも)。チュートリアル/座標)。
編集 #2: 考えられる答えはhttps://stackoverflow.com/a/14119731/257924にありますが、まだ確認中です。以下の編集#3で確認:
編集#3:Tim Downsの回答へのフォローアップ:これはうまくいきましたが、注意が必要です:
var sel = window.getSelection();
var result = "no_selection";
if (sel.rangeCount) {
var range = sel.getRangeAt(0).cloneRange();
if (range.getBoundingClientRect) {
range.collapse(true);
var rect = range.getBoundingClientRect();
if (rect) {
x = rect.left;
y = rect.top;
x += window.mozInnerScreenX;
y += window.mozInnerScreenY;
result = "" + x + " " + y;
}
}
}
result
注意点として、ユーザーがページで CTRL-PLUS または CTRL-MINUS を押してページをスケーリングした場合、x と y の値が正しくなくなります (スケーリングの問題)。しかし、スケーリングが含まれていない場合、x と y の値は絶対 X ルート ウィンドウ (Linux では X11 の下) 座標であり、最初に求めていた Firefox X ルート ウィンドウの原点に相対的ではないことがわかりました。
デバッグ中の倍率へのアクセスに関する別の関連する問題を尋ねました。