我在Gmail中运行了一个内容脚本,并且在不同的地方注入了一些新的HTML。这一切都是可行的,但是为了保持代码的整洁,我想在一个函数调用中将预定义的HTML标记插入到页面的某些部分。
使用chrome.extension.getURL()似乎所有这些都是可行的,但是当我测试它时,似乎chrome.extension是未定义的!我在文档中找不到说不应该定义它的地方,也找不到它应该定义的几个地方。
我使用的是铬版39.0.2171.95 (64位)
以下是javascript控制台中的chrome对象的样子:

首先,有人知道为什么chrome.extension可能没有定义吗?其次,还有其他(也许更好)的方法来做到这一点吗?我不希望仅仅以编程的方式在页面中使用jQuery等在内容脚本中向页面注入大量的HTML,而是在没有其他方法的情况下可以求助于此。
发布于 2015-01-13 00:38:48
如果您要在控制台中测试这一点,您必须了解孤立的世界的概念。添加内容脚本时,它有一个独立的JavaScript上下文,该上下文与页面隔离。
在Dev的Console选项卡的顶部,您将看到下拉列表中的<top frame>。这是一个下拉列表,它选择正在执行的JS上下文。它将列出文档中的框架和所有注入内容脚本的扩展。
屏幕截图中显示的chrome对象与网页通常看到的内容相对应。如果切换上下文,您将看到另一幅图片:

在任何情况下,如果您真的在内容脚本中执行chrome.extension.getURL(),那么它将被很好地定义。
现在,如果您在页面中注入一个<script>标记并在该代码中尝试它--它将再次失败,因为代码将位于页面上下文中。有关此情况,请参见这个问题。
最后,出于安全考虑,Chrome的大多数不会暴露在内容脚本中。如果是当API不应该被定义时,它是未定义的,您可能需要一个背景页面来为您完成这项工作。
https://stackoverflow.com/questions/27913065
复制相似问题