这些方法提供了实用程序,例如将内部资源表示转换为外部格式。此类别中的方法包括
getURL
#
Manifest
运行时 API 上的大多数方法不需要任何权限即可使用。但是,
sendNativeMessage
and
connectNative
需要在清单中声明 nativeMessaging 权限。
#
Examples
为了让网页访问托管在另一个域上的资产,它必须指定资源的完整 URL(例如
<img src="https://example.com/logo.png">
)。当网页想要包含扩展中包含的资产时也是如此。这里的两个主要区别是扩展的资产必须作为 Web 可访问资源
web accessible resources
公开,并且通常内容脚本负责注入扩展资产。
此示例显示内容脚本(
content script
)如何将扩展程序包中的图像添加到已注入(
injected
)内容脚本的页面。
{
const img = document.createElement('img');
img.src = chrome.runtime.getURL('logo.png');
document.body.append(img);
# Getting background data into a content script(Getting background data into a content script)
扩展的内容脚本通常需要由扩展的另一部分管理的数据,例如扩展的后台脚本。就像打开同一个网页的两个浏览器窗口一样,这两个上下文不能直接访问彼此的值。相反,扩展可以使用消息传递(message passing)来协调这些不同的上下文。
在这个例子中,内容脚本需要一些来自扩展后台脚本的数据来初始化它的 UI。为了获取这些数据,它向后台传递一条 get-user-data 消息,后台以用户信息的副本作为响应。
chrome.runtime.sendMessage('get-user-data', (response) => {
console.log('received user data', response);
initializeUI(response);
const user = {
username: 'demo-user'
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
if (message === 'get-user-data') {
sendResponse(user);
# Gathering feedback on uninstall(收集有关卸载的反馈)
许多扩展程序使用卸载后调查来了解扩展程序如何更好地为其用户服务并提高保留率。下面的示例展示了如何将此功能添加到他们的扩展中。
chrome.runtime.onInstalled.addListener(details => {
if (details.reason === chrome.runtime.OnInstalledReason.INSTALL) {
chrome.runtime.setUninstallURL('https://example.com/extension-survey');
Summary
Types
Properties
Methods
Events
Types
MessageSender
一个对象,包含有关发送消息或请求的脚本上下文的信息。
PROPERTIES
frameId
number optional
打开连接的框架(frame)。 0 表示顶级框架,正值表示子框架。这只会在设置tab时设置。
id
string optional
打开连接的扩展程序或应用程序的 ID(如果有)。
nativeApplication
string optional
Chrome 74+
打开连接的本机应用程序的名称(如果有)。
origin
string optional
Chrome 80+
打开连接的页面或框架的来源。它可以与 url 属性不同(例如 about:blank),也可以是不透明的(例如,沙盒 iframe)。如果我们不能立即从 URL 中分辨出来,这对于确定来源是否可信很有用。
tab
Tab optional
打开连接的 tabs.Tab(如果有)。此属性仅在从选项卡(包括内容脚本)打开连接时出现,并且仅当接收器是扩展程序而不是应用程序时才会出现。
tlsChannelId
string optional
打开连接的页面或框架的 TLS 通道 ID(如果扩展程序或应用程序请求并且可用)。
url
string optional
打开连接的页面或框架的 URL。如果发件人在 iframe 中,它将是 iframe 的 URL,而不是托管它的页面的 URL。
OnInstalledReason
Chrome 44+
正在调度此事件的原因。
TYPE
"install", "update", "chrome_update", or "shared_module_update"
OnRestartRequiredReason
Chrome 44+
调度事件的原因。 'app_update' 在需要重新启动时使用,因为应用程序已更新到较新的版本。'os_update' 在需要重新启动时使用,因为浏览器/操作系统已更新到更新版本。当系统运行时间超过企业策略中设置的允许正常运行时间时,使用“定期(periodic)”。
TYPE
"app_update", "os_update", or "periodic"
Chrome 44+
机器的处理器架构。
TYPE
"arm", "arm64", "x86-32", "x86-64", "mips", or "mips64"
一个包含当前平台信息的对象。
PROPERTIES
Chrome 44+
本机客户端架构。这可能与某些平台上的 arch 不同。
TYPE
"arm", "x86-32", "x86-64", "mips", or "mips64"
Chrome 44+
运行 Chrome 的操作系统。
TYPE
"mac", "win", "android", "cros", "linux", or "openbsd"
Port
允许与其他页面进行双向通信的对象。有关详细信息,请参阅长期连接(Long-lived connections)。
PROPERTIES
name
string
在调用 runtime.connect 时指定的端口名称。
onDisconnect
event
当端口与另一端断开连接时触发。如果端口因错误而断开连接,则可以设置 runtime.lastError 。如果端口通过断开(disconnect)连接关闭,则此事件仅在另一端触发。此事件最多触发一次(另请参阅端口生存期Port lifetime)。
onDisconnect.addListener 函数例如:
(callback: function) => {...}
callback
function
回调参数如下所示:
(port: Port) => void
onMessage
event
当端口的另一端调用 postMessage 时会触发此事件。
onMessage.addListener 函数如下所示:
(callback: function) => {...}
callback
function
回调参数如下所示:
(message: any, port: Port) => void
sender
MessageSender optional
此属性只会出现在传递给 onConnect / onConnectExternal / onConnectNative 侦听器的端口上。
disconnect
function
立即断开端口。在已断开连接的端口上调用 disconnect() 无效。当一个端口断开连接时,不会有新的事件被分派到这个端口。
disconnect功能如下所示:
() => {...}
postMessage
function
向端口的另一端发送消息。如果端口断开连接,则会引发错误。
postMessage 函数如下所示:
(message: any) => {...}
RequestUpdateCheckStatus
Chrome 44+
更新检查的结果。
TYPE
"throttled", "no_update", or "update_available"
Properties
id
扩展程序/应用程序的 ID。
TYPE
string
lastError
如果出现错误,这将在 API 方法回调期间定义
TYPE
object
PROPERTIES
message
string optional
有关发生的错误的详细信息。
Methods
connect
chrome.runtime.connect(
extensionId?: string,
connectInfo?: object,
尝试连接以连接扩展程序/应用程序(例如后台页面)或其他扩展程序/应用程序中的侦听器。这对于连接到它们的扩展进程、应用间/扩展通信和网络消息web messaging传递的内容脚本很有用。请注意,这不会连接到内容脚本中的任何侦听器。请注意,这不会连接到内容脚本中的任何侦听器。扩展可以通过 tabs.connect 连接到嵌入在标签中的内容脚本。
PARAMETERS
extensionId
string optional
要连接的扩展程序或应用程序的 ID。如果省略,将尝试使用您自己的扩展名进行连接。如果从网页发送消息以进行 Web 消息传递web messaging,则需要。
connectInfo
object optional
RETURNS
connectNative
chrome.runtime.connectNative(
application: string,
连接到主机中的本机应用程序。有关更多信息,请参阅本机消息传递(Native Messaging)。
PARAMETERS
application
string
要连接的已注册应用程序的名称。
RETURNS
getBackgroundPage
chrome.runtime.getBackgroundPage(
callback: function,
)
Foreground only
检索在当前扩展程序/应用程序中运行的后台页面的 JavaScript 'window' 对象。如果后台页面是一个事件页面,系统会在调用回调之前确保它被加载。如果没有后台页面,则设置错误。
PARAMETERS
callback
function
The callback parameter looks like:
(backgroundPage?: Window) => void
getManifest
chrome.runtime.getManifest()
从清单(manifest file)返回有关应用程序或扩展程序的详细信息。返回的对象是完整清单文件的序列化。
RETURNS
getPackageDirectoryEntry
chrome.runtime.getPackageDirectoryEntry(
callback: function,
Foreground only
返回包目录的 DirectoryEntry。
PARAMETERS
callback
function
The callback parameter looks like:
(directoryEntry: DirectoryEntry) => void
directoryEntry
DirectoryEntry
chrome.runtime.getPlatformInfo(
callback: function,
返回有关当前平台的信息。
PARAMETERS
callback
function
The callback parameter looks like:
(platformInfo: PlatformInfo) => void
getURL
chrome.runtime.getURL(
path: string,
将应用程序/扩展安装目录中的相对路径转换为完全限定的 URL。
PARAMETERS
RETURNS
openOptionsPage
chrome.runtime.openOptionsPage(
callback?: function,
如果可能,打开扩展程序的选项页面。
确切的行为可能取决于清单的 options_ui 或 options_page 键,或者当时 Chrome 刚好支持什么。例如,该页面可能会在新标签页、chrome://extensions 中、应用程序中打开,或者它可能只关注打开的选项页面。它永远不会导致调用者页面重新加载。
如果您的扩展程序未声明选项页面,或者 Chrome 由于其他原因未能创建选项页面,则回调将设置 lastError。
PARAMETERS
reload
chrome.runtime.reload()
重新加载应用程序或扩展程序。自助服务终端(kiosk)模式不支持此方法。对于自助服务终端(kiosk)模式,请使用 chrome.runtime.restart() 方法。
requestUpdateCheck
chrome.runtime.requestUpdateCheck(
callback: function,
请求立即对此应用程序/扩展程序进行更新检查。
重要提示:大多数扩展程序/应用程序不应使用此方法,因为 Chrome 已经每隔几个小时进行一次自动检查,并且您可以侦听 runtime.onUpdateAvailable 事件而无需调用 requestUpdateCheck。
这种方法只适合在非常有限的情况下调用,例如,如果您的扩展程序/应用程序与后端服务通信,并且后端服务确定客户端扩展程序/应用程序版本非常过时,并且您想提示用户进行更新。requestUpdateCheck 的大多数其他用途,例如基于重复计时器无条件调用它,可能只会浪费客户端、网络和服务器资源。
PARAMETERS