铬对象或铬.制表符对象不能从除后台脚本以外的脚本访问

chrome object or chrome.tabs object not accessible from script other than a background script

本文关键字:脚本 对象 访问 制表符 不能 后台      更新时间:2023-09-26

我正在尝试chrome扩展API,我遇到了一个我不理解的问题,

我有一个背景脚本"背景。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"});
});
内容脚本

chrome.tabs.executeScript({code:"console.log('content_script')"});

后台脚本中的console.log工作完美,但在content_script中的一个,我得到一个错误-> "无法读取未定义的属性'executeScript' "

这意味着我不能访问chrome对象,或chrome。选项卡对象从内容脚本。为什么会这样?

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

内容脚本不能访问所有Chrome api。根据官方文件:

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

下面是一些内容脚本可以做的例子:

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

后台脚本是一个长时间运行的脚本,用于管理一些任务或状态。而后台脚本可以访问所有Chrome api。

如果您想在内容脚本和背景脚本之间传递信息,请使用:Chrome Message Passing