我正在尝试学习使用chrome.tabs.executeScript推荐。我已经使用浏览器操作创建了一个简单的扩展。我的background.html文件目前看起来像这样:
<html>
<script>
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(null,{code:"document.body.bgColor='red'"});
chrome.tabs.executeScript(null, {file: "content_script.js"});
});
</script>
</html>
“content_script.js”文件包含document.body.bgColor ='red'。
按下浏览器操作按钮时没有任何反应。显然我错过了一些非常基本的东西。
我已经使用console.log检查过,当按下浏览器操作时,确实控制到达chrome.tabs.executeScript调用。否则我不确定如何检查我的内容脚本的代码是否运行(似乎没有;我在内容脚本中放入的console.log没有效果,但即使脚本运行成功,它也可能没有效果)。
答案 0 :(得分:37)
确保您在清单中拥有域和标签权限:
"permissions": [
"tabs", "http://*/*", "https://*/*"
]
然后改变体色尝试:
chrome.tabs.executeScript(null,{code:"document.body.style.backgroundColor='red'"});
另请注意,内容脚本不会注入任何chrome://
或扩展程序库页面。
答案 1 :(得分:11)
对于那些仍有问题的人,您需要确保在Chrome中重新加载扩展程序的权限。
转到chrome://extensions
,滚动到您的扩展程序,然后点击“重新加载”。点击扩展程序旁边的权限链接,确保您的权限已更新。
答案 2 :(得分:3)
您实际上不需要也不希望执行executeScript的“标签”权限。
"permissions": [
"http://*/*",
"https://*/*"
]
应该够了
答案 3 :(得分:0)
不建议使用http://*/*
和https://*/*
。从Google文档中:
要注入程序内容脚本,请在清单中提供activeTab权限。这将授予对活动站点主机的安全访问权限以及对选项卡权限的临时访问权限,从而使内容脚本可以在当前活动选项卡上运行而无需指定cross-origin permissions。
相反,(如页面中所建议的)只需使用activeTab
权限。