Web ページのテキストで指定された文字列または正規表現を置き換える Chrome 拡張機能に取り組んでいます。
全体的にはうまく機能しますが、解決したい2つの問題があります。
(1) テキスト置換が行われる前に、変更されていない元の Web ページ テキストが表示されます。
(2) テキストの置換は、ページの下部までスクロールした後に動的に読み込まれる Facebook の投稿には影響しません。
これは、 https://stackoverflow.com/a/6012345#6012345からマイナーな変更を加えたコードです。
// manifest.json
{
"manifest_version": 2,
"name": "Replace Text",
"version": "1.0",
"content_scripts": [ {
"js": [ "jquery.min.js", "replace.js" ],
"matches": [ "<all_urls>" ],
"run_at": "document_end"
} ]
}
// replace.js
jQuery.fn.textWalk = function( fn ) {
this.contents().each( jwalk );
function jwalk() {
var nn = this.nodeName.toLowerCase();
if( nn === '#text') {
fn.call( this );
} else if( this.nodeType === 1 && this.childNodes && this.childNodes[0] && nn !== 'script' && nn !== 'textarea' ) {
$(this).contents().each( jwalk );
}
}
return this;
};
$('body').textWalk(function() {
this.data = this.data.replace('This Text', 'That Text');
this.data = this.data.replace(/[Rr]eplace\s[Ss]ome\s[Tt]ext/g, 'with other text');
});
オンラインで部分的な回答をいくつか見つけましたが、正しく機能させることができませんでした。
たとえば、提案された解決策の 1 つは、に変更"run_at": "document_end"
することでした"run_at": "document_start"
。これにより、DOM が構築される前にコンテンツ スクリプトが実行されるため、理論的には、何かが表示される前にテキストの置換を行う必要があります。しかし、私の場合、拡張機能がテキストの置き換えを完全に停止する原因となりました。