0

テキストを変更するために使用したい小さなChrome拡張機能があります。希望どおりに機能します(アイコンをクリックするとテキストが変更されます)が、一部のページでは、アプリを有効にすると既存のjqueryが機能しなくなります。私は何が間違っているのですか?

ファイル:manifest.json、myscript.js、background.html

マニフェスト.jsonコンテンツ:

{
  "name": "My extension",
  "version": "1.0",
  "background_page": "background.html",
  "permissions": [
    "tabs", "http://*/*"
  ],
  "content_scripts": [
    {
      "matches": ["http://*/*"],
    "matches": ["https://*/*"],
      "js": ["myscript.js"]
    }
  ],
"browser_action": {
    "default_icon": "icon.png"
    }
}

myscript.jsコンテンツ:

var array = {"not":" NOT ", "like":" LIKE ", "job":"JOBS"}

for (var val in array)
    document.body.innerHTML = document.body.innerHTML.replace(new RegExp(val, "g"),     array[val]);

background.htmlコンテンツ:

<script>
chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.executeScript(null,
                       {file:"myscript.js"});
});
</script>
4

1 に答える 1

0

document.body.innerHTML非常に悪いです。

これを使用すると、DOMノードを生のテキストとして扱います。これらのDOMノードにはイベントハンドラーがあり、単純なdocument.body.innerHTML+='...'ものでも既存のノードを忘却に送り、イベントハンドラーなしで新しいノードを作成します。

したがって、代わりに、ドキュメント内のすべてのテキストノードを反復処理し(*ここで方法を参照)、innerHTMLをそれぞれ個別に実行する必要があります。

Sănătate!

于 2012-05-23T18:47:07.640 に答える