0

私はChrome拡張機能を開発しています。ここにこの機能があります:

function makeEditableAndHighlight(colour) {
    var range, sel = window.getSelection();
    if (sel.rangeCount && sel.getRangeAt) {
        range = sel.getRangeAt(0);
    }
    document.designMode = "on";
    if (range) {
        sel.removeAllRanges();
        sel.addRange(range);
    }
    // Use HiliteColor since some browsers apply BackColor to the whole block
    if (!document.execCommand("HiliteColor", false, colour)) {
        document.execCommand("BackColor", false, colour);
    }
    document.designMode = "off";
}

function highlight(colour) {
    var range, sel;
    if (window.getSelection) {
        // IE9 and non-IE
        try {
            if (!document.execCommand("BackColor", false, colour)) {
                makeEditableAndHighlight(colour);
            }
        } catch (ex) {
            makeEditableAndHighlight(colour)
        }
    } else if (document.selection && document.selection.createRange) {
        // IE <= 8 case
        range = document.selection.createRange();
        range.execCommand("BackColor", false, colour);
    }
}

選択したテキストの一部を強調表示 (背景色から黄色) するために使用します。問題は、ハイライトを解除することです。

これは私がしました:

function body() {
    document.getElementsByTagName("body")[0].addEventListener(
    "click", 
    function(event){
      highlight('transparent');
    }
  );
}

それに関する問題は次のとおりです。

1)テキストを選択したままにする必要がありますが、クリックすると選択が解除されるため、まったく同じテキストを再度選択して実際にON ITをクリックした場合にのみ機能します。

2)ページの実行が非常に遅くなり、時にはロックされるようです。

私がやりたいことはこれです:

どこでもクリックすると、テキストのハイライトが解除され、選択が解除されます(基本的に、テキストの選択が解除されるたびに、ハイライトを透明または以前の状態に設定します)。

どうする?

PS - Javascript のみ。jQuery を使用する方法があれば教えてください。ただし、Chrome 拡張機能用にファイルされた content.js 内で使用する必要があることを覚えておいてください。

4

1 に答える 1