我有一个小的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>
答案 0 :(得分:0)
document.body.innerHTML
非常糟糕。
使用它时,您将DOM节点视为原始文本。这些DOM节点具有事件处理程序,即使是简单的document.body.innerHTML+='...'
也会将现有节点发送到遗忘状态,创建新节点,而不使用事件处理程序。
因此,您需要遍历文档(*see here how)中的所有文本节点,并分别对每个文本节点执行内部HTML。
Sănătate!