Javascript 使用Chrome扩展内容脚本嵌入其他内容

Javascript 使用Chrome扩展内容脚本嵌入其他内容,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我正在开发一个Chrome扩展,它将为一组特定的页面添加内容。根据我的研究,听起来我想要的是一个能为适当页面执行的。我可以使用content\u script.matchesmanifest.json字段指定“适当的页面” 然而,我遇到的问题是,内容脚本在一个孤立的世界中运行 我是如何设想我的扩展的,它是一组由内容脚本嵌入到适当页面上的内容。将包含用于构建UI页面内容的代码。后台页面,以及扩展后的UI页面,需要访问各种ChromeAPI(例如本地存储),并且能够发出跨域请求以检索其数据。然而,这

我正在开发一个Chrome扩展,它将为一组特定的页面添加内容。根据我的研究,听起来我想要的是一个能为适当页面执行的。我可以使用
content\u script.matches
manifest.json字段指定“适当的页面”

然而,我遇到的问题是,内容脚本在一个孤立的世界中运行

我是如何设想我的扩展的,它是一组由内容脚本嵌入到适当页面上的内容。将包含用于构建UI页面内容的代码。后台页面,以及扩展后的UI页面,需要访问各种ChromeAPI(例如本地存储),并且能够发出跨域请求以检索其数据。然而,这似乎是不可能的,因为内容脚本在一个孤立的世界中运行,并且无法访问我需要的ChromeAPI

允许内容脚本从后台页面发送和接收数据,但不允许您获取UI页面并将其嵌入当前网页

我最初认为我在这方面取得了一些进展,当时我可以做一些修改,但这只会让我得到HTML文件本身。我的UI页面依赖于代码以编程方式构建内容——它不仅仅是一个静态HTML页面。“构建页面”JavaScript代码依赖于内容脚本不可用的ChromeAPI。因此,如果我只是尝试创建我的所有UI页面和JavaScript资源,我可以将它们注入页面,但它们无法运行


这就引出了我的问题:一个内容脚本如何能够下拉或嵌入,从而调用后台页面中的代码?

Tldr:您需要阅读有关在内容/后台之间发送消息的内容。它在文档和许多示例中。

根据我所能找到的,我所希望的架构(如我问题中所述)在Chrome扩展中是不可能的。Chrome的安全模型需要一种不同的方法。这是对我有用的东西

  • 使您的模板、JavaScript文件和任何属于UI的内容
  • 使用内容脚本加载这些资源,并在适当的时间/位置向用户显示它们
  • ()对
    chrome.*
    API的任何调用都需要通过或完成。在我的例子中,“背景页面”是严格的JavaScript,没有HTML
  • 您的内容脚本和UI可以发送到后台/事件页面
此模型与web应用程序的传统客户端/服务器体系结构没有什么不同。“后台页面”类似于您的服务器,您的内容脚本可以向“后台页面”发送“消息”(想想HTTP请求),就像它可能向您的服务器发送请求一样

与服务器一样,后台页面也可以访问内容脚本无法访问的资源,例如,后台页面可以使用更多的资源


这种心理类比帮助我“重新设计”了我的应用程序,目前为止,这种方式在Chrome扩展安全模型中起作用。我最初考虑的更多是传统的桌面应用程序,整个应用程序可以做一些事情,比如跨域请求或写入文件系统。但是,Chrome扩展和应用程序不是这样工作的。

仅供参考,内容脚本还可以发出跨域请求,使用Chrome API的部分内容(消息、存储和一些安全扩展实用程序)。后台页面无法发出原始TCP请求,因此SMTP也不是一个选项。(不是扩展名)可以访问API,因此理论上它们可以使用SMTP发送邮件。Chrome扩展无法写入live文件系统中的文件,但如果用户已批准该权限,则后台页面(而不是内容脚本)可以读取文件。如果你想要这些功能,可以看看Chrome应用程序。但是,这些不能集成到网页中。很显然,关于这里的所有选项,我还有很多要学习的。我再次更新了答案。