Google Chrome拡張機能を作成して、ユーザーがコンポーネント内のテキストを選択できるようにしました。これはほとんどのサイトで効果的です。しかし、Facebookはステータス更新を別々に処理します。 1つのテキストボックスのように見えても、実際にはこのテキストボックスのすべての1行にdiv > div > span > span
という構文を使用しているようです。私はなぜ彼らがこれをすることを選んだのか分かりませんが、それは複数の行のテキストをより複雑に置き換えることになります。FacebookのステータスアップデートでChrome拡張機能を使用して複数の行にまたがる文字を置き換える
Facebookステータスの更新で複数の行(または複数行の連続部分)を選択して置き換える方法はありますか?
私のコードの関連部分は次のようになります。私は、私は何の問題を持っていない単一の行にテキストを置き換えるならば、私のコードは、今動作方法に基づいて
function replace_text(language){
let selection = window.getSelection();
string = selection.toString();
/* This section contains code that uses string.replace to replace characters in the string. */
document.execCommand("insertText", false, string);
}
。しかし、複数の行にまたがるテキストを置き換えると、使用できない空白の入力ボックスになります。間違いなく、それはhtmlコードの一部を削除しているためです。置き換えプロセスが他のサイトだけでなくFacebookのためにも適切に機能するように、コードを修正するにはどうすればよいですか?
簡単に聞こえません。選択したテキストの親を決定して、現在の要素の種類を調べることができます。選択が要素にまたがる場合、そのテキストがどのように機能するかはわかりません。あなたは上向きに作業し、innertextに選択文字列が含まれている要素を見つけ出すことができます。ただし、要素の構造をそのまま維持する必要があるため、置き換えは難しいでしょう。他のすべてがうまくいかなかった場合は、置換文字列を修正してキー入力をエミュレートして、すべてを削除してテキストを再入力することができます。申し訳ありませんが、念のために考えてみましょう。 –