Gmail Chrome 扩展 "chrome.extension" 未定义

Gmail Chrome Extension "chrome.extension" undefined

我在 Gmail UI 中有一个内容脚本 运行,我在不同的位置注入了一些新的 HTML。这一切正常,但为了保持代码干净,我想在单个函数调用中将 pre-defined HTML 标记插入页面的某些部分。

使用 chrome.extension.getURL() 这一切似乎都是可行的,但是当我测试它时,看起来 chrome.extension 是未定义的!我无法在文档中找到任何地方说不应定义它,也找不到它说应该定义的几个地方。

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

下面是 chrome 对象在 javascript 控制台中的样子:

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

如果您在控制台中对此进行测试,则必须了解 Isolated World 的概念。当您添加内容脚本时,它有一个单独的 JavaScript 自身上下文,与页面隔离。

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

您在屏幕截图中显示的 chrome 对象对应于网页通常看到的内容。如果切换上下文,您会看到不同的图片:

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


现在,如果您在页面中插入一个 <script> 标记并在该代码中尝试它 - 它会再次失败,因为代码将在页面上下文中。有关此情况,请参阅 this question

最后,出于安全原因,Chrome API 中的 大多数 将不会暴露给内容脚本。如果 an API is undefined when it shouldn't be,您可能需要一个后台页面来为您完成这项工作。