gpt4 book ai didi

javascript - Gmail Chrome 扩展程序 "chrome.extension"未定义

转载 作者:行者123 更新时间:2023-11-30 08:39:34 24 4
gpt4 key购买 nike

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

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

我使用的是 chrome 版本 39.0.2171.95(64 位)

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

chrome object

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

最佳答案

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

在 Dev Tools 的 Console 选项卡的顶部,您会看到 <top frame>在下拉列表中。这是一个下拉菜单,用于选择它在其中执行的 JS 上下文。它将列出文档中的框架以及注入(inject)了内容脚本的所有扩展。

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

Switching context

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


现在,如果你注入(inject)了一个 <script>在页面中标记并在该代码中尝试它 - 它会再次失败,因为代码将在页面上下文中。参见 this question对于这种情况。

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

关于javascript - Gmail Chrome 扩展程序 "chrome.extension"未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27913065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com