0

我有一个小的 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>
4

1 回答 1

0

document.body.innerHTML很糟糕。

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

因此,您需要遍历文档中的所有文本节点(*请参见此处如何)并单独执行一个 innerHTML。

祝你好运!

于 2012-05-23T18:47:07.640 回答