2012-05-23 29 views
0

我有一个小的Chrome扩展,我想用它来改变文本。它按我希望的方式工作(单击图标更改文本),但在某些页面上,现有的jquery在启用应用程序时停止工作。我究竟做错了什么?Chrome扩展导致jQuery和一些页面上的JavaScript问题

文件: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> 

回答

0

document.body.innerHTML非常糟糕。

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

相反,您需要遍历文档(*see here how)中的所有文本节点,并分别对每个文本节点执行一次innerHTML。

Sănătate!