无法从后台脚本以外的脚本访问chrome对象或chrome.tabs对象

iro*_*ein 0 javascript google-chrome-extension content-script

我正在尝试使用chrome扩展API,我遇到了一个我不明白的问题,

我有一个后台脚本"background.js"和一个内容脚本"content_script.js".

background.js

chrome.browserAction.onClicked.addListener(function(tab) {
    chrome.tabs.executeScript({code:"console.log('background script')"});
    chrome.tabs.executeScript({file:"javascript/content_script.js"});
});
Run Code Online (Sandbox Code Playgroud)

内容脚本

chrome.tabs.executeScript({code:"console.log('content_script')"});
Run Code Online (Sandbox Code Playgroud)

后台脚本中的console.log工作得很好,但是在content_script中,我得到一个错误 - > "无法读取属性'executeScript'的undefined"

这意味着我无法从内容脚本访问chrome对象或chrome.tabs对象.为什么会这样?

Ana*_*ina 6

内容脚本在网页的上下文中运行,而不是在扩展名中运行.

内容脚本无权访问所有Chrome API.根据官方文件:

内容脚本是在网页上下文中运行的JavaScript文件.通过使用标准文档对象模型(DOM),他们可以阅读浏览器访问的网页的详细信息,或对其进行更改.

以下是内容脚本可以执行的一些示例:

  • 在网页中查找未链接的URL并将其转换为超链接
  • 增加字体大小以使文本更清晰
  • 在DOM中查找和处理微格式数据

后台脚本是一个长期运行的脚本来管理某个任务或状态.虽然后台脚本可以访问所有Chrome API.

如果要在内容脚本和后台脚本之间传递信息,请执行以下操作:Chrome消息传递