Gmail Chrome扩展程序“ chrome.extension”未定义

Bry*_*anP 1 html javascript google-chrome google-chrome-extension

我在Gmail用户界面中运行了一个内容脚本,并且在不同的位置注入了一些新的HTML。一切正常,但是为了保持代码整洁,我想在单个函数调用中将预定义的HTML标记插入页面的某些部分。

使用chrome.extension.getURL()这一切似乎都是可行的,但是当我进行测试时,好像chrome.extension是未定义的!我在文档中找不到该定义的地方,也找不到它应该定义的地方。

我正在使用Chrome版本39.0.2171.95(64位)

chrome对象在javascript控制台中的外观如下:

镀铬物体

首先,有人知道为什么chrome.extension可能未定义吗?其次,还有另一种(也许更好)的方法吗?我宁愿不仅仅是在内容脚本中使用jQuery等以代码方式将大量HTML注入页面中,而且如果没有其他方法,可以诉诸于此。

Xan*_*Xan 5

如果要在控制台中进行测试,则必须了解孤立世界的概念。添加内容脚本时,它具有与页面隔离的单独的JavaScript上下文。

在“开发工具”的“控制台”选项卡顶部,您会<top frame>在下拉列表中看到。这是一个下拉列表,用于选择要在其中执行的JS上下文。它将列出文档内的框架以及所有注入了内容脚本的扩展。

chrome您在屏幕快照中显示的对象与网页通常看到的相对应。如果切换上下文,则会看到不同的图片:

切换上下文

无论如何,如果您确实chrome.extension.getURL()在内容脚本中执行-它将被很好地定义。


现在,如果您<script>在页面中注入标签并在该代码中进行了尝试,则代码将再次失败,因为该代码将位于页面上下文中。有关这种情况,请参阅此问题

最后,出于安全原因,大多数 Chrome API不会公开给内容脚本。如果未定义API时未定义,则可能需要一个后台页面来为您完成这项工作。