私は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 内で使用する必要があることを覚えておいてください。