Chrome扩展程序会在某些页面上导致jquery和javascript出现问题

时间:2012-05-23 06:48:55

标签: google-chrome google-chrome-extension

我有一个小的Chrome扩展程序,我想用它来更改文本。它按照我想要的方式工作(单击图标更改文本),但在某些页面上,现有的jquery在启用应用程序时停止工作。我做错了什么?

文件:manifest.json,myscript.js和background.html

manifest.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>

1 个答案:

答案 0 :(得分:0)

document.body.innerHTML非常糟糕。

使用它时,您将DOM节点视为原始文本。这些DOM节点具有事件处理程序,即使是简单的document.body.innerHTML+='...'也会将现有节点发送到遗忘状态,创建新节点,而不使用事件处理程序。

因此,您需要遍历文档(*see here how)中的所有文本节点,并分别对每个文本节点执行内部HTML。

Sănătate!