1. ホーム
  2. javascript

テキストハイライトイベント時?

2023-09-08 06:54:46

質問

私は、ユーザーがWebページ上でテキストを選択し終わったら、または一旦実行する関数をトリガーする方法を知っている人がいれば知りたいです。私は、ユーザーがテキストを選択でき、短い遅延 (またはすぐに、この時点ではあまり重要ではありません) の後に、ユーザーがクリックできるテキストの近くにオーバーレイ ボタンが表示され、私が戻って選択に基づいて私のコードの多くを実行できるようにしたいです。これは、Firefox 拡張機能のためのものです。

私が思いつく似たような例は、IE でテキストを選択すると、Web アクセラレータが表示されるようなものです。実際にボタンをオーバーレイして、選択したテキストの位置を取得する方法は 99% わかっていますが、ある種の無限ループを実行せずに、選択したものがあるかどうかを確認する方法がわかりません。

EDIT。

//In my overlay.js with the rest of my sidebar code
isTextSelected: function () {   
        var myText = cqsearch.getSelectedText();
        var sidebar = document.getElementById("sidebar");
        var sidebarDoc = sidebar.contentDocument || document;

        var curHighlightedDiv = sidebarDoc.getElementById("testDiv");
        curHighlightedDiv.innerHTML = "Current text selection:" + myText;
    }
};

//In my on firefox load function I added this
document.onmouseup = cqsearch.isTextSelected;

これはRobertの提案を使って思いついたもので、すべてを正しい位置に配置するのに少し時間がかかりましたが、とてもうまくいきました。次に、ボタンを配置します。

どのように解決するのですか?

には onhighlightext などがありますが、解決策としては、バインディングで onmouseup にない場合は、テキストが選択されているかどうかをチェックするために input / textarea .

編集

以下は実装例です。Chrome/Firefox/IE7でしかテストしていません。入力でも動作します。

http://jsfiddle.net/qY7gE/

のコード JSFiddle :

var t = '';
function gText(e) {
    t = (document.all) ? document.selection.createRange().text : document.getSelection();

    document.getElementById('input').value = t;
}

document.onmouseup = gText;
if (!document.all) document.captureEvents(Event.MOUSEUP);
<input type='text' id='input' />
In software, a stack overflow occurs when too much memory is used on the call stack. The call stack contains a limited amount of memory, often determined at the start of the program. The size of the call stack depends on many factors, including the programming language, machine architecture, multi-threading, and amount of available memory. When too much memory is used on the call stack the stack is said to overflow, typically resulting in a program crash.[1] This class of software bug is usually caused by one of two types of programming errors.[2]