chrome.runtime

Description

使用 chrome.runtime API 检索后台页面、返回有关清单的详细信息,以及侦听和响应应用程序或扩展程序生命周期中的事件。您还可以使用此 API 将 URL 的相对路径转换为完全限定的 URL。

运行时 API 提供了支持扩展可以使用的许多功能领域的方法:

  • 消息传递

    • 这些方法支持消息传递,以便您可以与扩展程序的不同部分(例如扩展程序弹出窗口和后台脚本)、其他扩展程序或用户设备上的本机应用程序进行通信。有关主题的概述,请参阅消息传递(Message Passing)。此类别中的方法包括connect, connectNative, sendMessage, 和 sendNativeMessage.。
  • 访问扩展和平台元数据

  • 管理扩展生命周期和选项

  • 设备重启支持

    • 这些方法仅在 Chrome 操作系统上可用,主要用于支持自助服务终端实现。此类别中的方法包括 restartrestartAfterDelay.
  • 辅助工具

    • 这些方法提供了实用程序,例如将内部资源表示转换为外部格式。此类别中的方法包括getURL

# Manifest

运行时 API 上的大多数方法不需要任何权限即可使用。但是,sendNativeMessage and connectNative 需要在清单中声明 nativeMessaging 权限。

# Examples

# 使用 getURL 向页面添加扩展图像

为了让网页访问托管在另一个域上的资产,它必须指定资源的完整 URL(例如 <img src="https://example.com/logo.png">)。当网页想要包含扩展中包含的资产时也是如此。这里的两个主要区别是扩展的资产必须作为 Web 可访问资源web accessible resources公开,并且通常内容脚本负责注入扩展资产。

此示例显示内容脚本(content script)如何将扩展程序包中的图像添加到已注入(injected)内容脚本的页面。

//// content.js ////

{ // Block used to avoid setting global variables
  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 消息,后台以用户信息的副本作为响应。

//// content.js ////

// 1. Send the background a message requesting the user's data
chrome.runtime.sendMessage('get-user-data', (response) => {
  // 3. Got an asynchronous response with the data from the background
  console.log('received user data', response);
  initializeUI(response);
});
//// background.js ////

// Example of a simple user data object
const user = {
  username: 'demo-user'
};

chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
  // 2. A page requested user data, respond with a copy of `user`
  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"

PlatformArch

Chrome 44+

机器的处理器架构。

TYPE


"arm", "arm64", "x86-32", "x86-64", "mips", or "mips64"

PlatformInfo

一个包含当前平台信息的对象。

PROPERTIES

PlatformNaclArch

Chrome 44+

本机客户端架构。这可能与某些平台上的 arch 不同。

TYPE


"arm", "x86-32", "x86-64", "mips", or "mips64"

PlatformOs

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) => {...}

    • message

      any

      Chrome 52+

      要发送的消息。这个对象应该是 JSON-ifiable。

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

    • includeTlsChannelId

      boolean optional

      对于侦听连接事件的进程,TLS 通道 ID 是否将传递到 onConnectExternal 中。

    • name

      string optional

      将被传递给监听连接事件的进程的 onConnect

RETURNS

  • Port

    可以通过其发送和接收消息的端口。如果扩展程序/应用程序不存在,则会触发端口的 onDisconnect 事件。

connectNative

chrome.runtime.connectNative(
  application: string,
)

连接到主机中的本机应用程序。有关更多信息,请参阅本机消息传递(Native Messaging)。

PARAMETERS

  • application

    string

    要连接的已注册应用程序的名称。

RETURNS

  • Port

    应用程序可以通过其发送和接收消息的端口

getBackgroundPage

chrome.runtime.getBackgroundPage( callback: function, )

Foreground only

检索在当前扩展程序/应用程序中运行的后台页面的 JavaScript 'window' 对象。如果后台页面是一个事件页面,系统会在调用回调之前确保它被加载。如果没有后台页面,则设置错误。

PARAMETERS

  • callback

    function

    The callback parameter looks like:

    (backgroundPage?: Window) => void

    • backgroundPage

      Window optional

      背景页面的 JavaScript 'window' 对象。

getManifest

chrome.runtime.getManifest()

从清单(manifest file)返回有关应用程序或扩展程序的详细信息。返回的对象是完整清单文件的序列化。

RETURNS

  • object

    清单详情。

getPackageDirectoryEntry

chrome.runtime.getPackageDirectoryEntry(
  callback: function,
)

Foreground only

返回包目录的 DirectoryEntry。

PARAMETERS

  • callback

    function

    The callback parameter looks like:

    (directoryEntry: DirectoryEntry) => void

    • directoryEntry

      DirectoryEntry

getPlatformInfo

chrome.runtime.getPlatformInfo(
  callback: function,
)

返回有关当前平台的信息。

PARAMETERS

  • callback

    function

    The callback parameter looks like:

    (platformInfo: PlatformInfo) => void

getURL

chrome.runtime.getURL(
  path: string,
)

将应用程序/扩展安装目录中的相对路径转换为完全限定的 URL。

PARAMETERS

  • path

    string

    应用程序/扩展程序中资源的路径,表示相对于其安装目录。

RETURNS

  • string

    资源的完全限定 URL。

openOptionsPage

chrome.runtime.openOptionsPage(
  callback?: function,
)

如果可能,打开扩展程序的选项页面。

确切的行为可能取决于清单的 options_uioptions_page 键,或者当时 Chrome 刚好支持什么。例如,该页面可能会在新标签页、chrome://extensions 中、应用程序中打开,或者它可能只关注打开的选项页面。它永远不会导致调用者页面重新加载。

如果您的扩展程序未声明选项页面,或者 Chrome 由于其他原因未能创建选项页面,则回调将设置 lastError

PARAMETERS

  • callback

    function optional

    The callback parameter looks like:

    () => void

reload

chrome.runtime.reload()

重新加载应用程序或扩展程序。自助服务终端(kiosk)模式不支持此方法。对于自助服务终端(kiosk)模式,请使用 chrome.runtime.restart() 方法。

requestUpdateCheck

chrome.runtime.requestUpdateCheck(
  callback: function,
)

请求立即对此应用程序/扩展程序进行更新检查。

重要提示:大多数扩展程序/应用程序不应使用此方法,因为 Chrome 已经每隔几个小时进行一次自动检查,并且您可以侦听 runtime.onUpdateAvailable 事件而无需调用 requestUpdateCheck。

这种方法只适合在非常有限的情况下调用,例如,如果您的扩展程序/应用程序与后端服务通信,并且后端服务确定客户端扩展程序/应用程序版本非常过时,并且您想提示用户进行更新。requestUpdateCheck 的大多数其他用途,例如基于重复计时器无条件调用它,可能只会浪费客户端、网络和服务器资源。

PARAMETERS

  • callback

    function

    The callback parameter looks like:

    (status: RequestUpdateCheckStatus, details?: object) => void

    • status

      RequestUpdateCheckStatus

      更新检查的结果。

    • details

      object optional

      如果有可用更新,则其中包含有关可用更新的更多信息。

      • version

        string

        可用更新的版本。

restart

chrome.runtime.restart()

当应用在自助服务终端(kiosk)模式下运行时重新启动 ChromeOS 设备。否则,它是无操作的。

restartAfterDelay

chrome.runtime.restartAfterDelay(
  seconds: number,
  callback?: function,
)

Chrome 53+

当应用在给定秒数后以自助服务终端模式运行时,重新启动 ChromeOS 设备。如果在时间结束之前再次调用,则重启将被延迟。如果以 -1 的值调用,则重新启动将被取消。这是非自助服务终端模式下的空操作。只允许第一个扩展重复调用来调用这个 API。

PARAMETERS

  • seconds

    number

    在重新启动设备之前等待的时间(以秒为单位),或 -1 以取消计划的重新启动。

  • callback

    function optional

    The callback parameter looks like:

    () => void

sendMessage

chrome.runtime.sendMessage(
  extensionId?: string,
  message: any,
  options?: object,
  responseCallback?: function,
)

向您的扩展程序/应用程序或其他扩展程序/应用程序中的事件侦听器发送一条消息。与 runtime.connect 类似,但只发送一条消息,带有可选的响应。如果发送到您的扩展,runtime.onMessage 事件将在您的扩展的每一帧中被触发(发送者的帧除外),或者 runtime.onMessageExternal,如果是不同的扩展。请注意,扩展无法使用此方法向内容脚本发送消息。要将消息发送到内容脚本,请使用 tabs.sendMessage

PARAMETERS

  • extensionId

    string optional

    要将消息发送到的扩展程序/应用程序的 ID。如果省略,消息将发送到您自己的扩展程序/应用程序。如果从网页发送消息以进行 Web 消息传递web messaging,则需要。

  • message

    any

    要发送的消息。此消息应该是一个 JSON-ifiable 对象。

  • options

    object optional

    • includeTlsChannelId

      boolean optional

      对于侦听连接事件的进程,TLS 通道 ID 是否将传递到 onMessageExternal 中。

  • responseCallback

    function optional

    The responseCallback parameter looks like:

    (response: any) => void

    • response

      any

      消息处理程序发送的 JSON 响应对象。如果在连接到扩展时发生错误,将不带参数调用回调,并且 runtime.lastError 将设置为错误消息。

sendNativeMessage

chrome.runtime.sendNativeMessage(
  application: string,
  message: object,
  responseCallback?: function,
)

向本机应用程序发送一条消息。

PARAMETERS

  • application

    string

    本机消息传递主机的名称。

  • message

    object

    将传递到本机消息传递主机的消息。

  • responseCallback

    function optional

    The responseCallback parameter looks like:

    (response: any) => void

    • response

      any

      本地消息传递主机发送的响应消息。如果在连接到本机消息传递主机时发生错误,将不带参数调用回调,并且 runtime.lastError 将设置为错误消息。

setUninstallURL

chrome.runtime.setUninstallURL(
  url: string,
  callback?: function,
)

设置卸载时要访问的 URL。这可用于清理服务器端数据、进行分析和实施调查。最多 255 个字符。

PARAMETERS

  • url

    string

    卸载扩展后打开的 URL。此 URL 必须具有 http: 或 https: 方案。设置一个空字符串以在卸载时不打开新选项卡。

  • callback

    function optional

    Chrome 45+

    The callback parameter looks like:

    () => void

Events

onBrowserUpdateAvailable

chrome.runtime.onBrowserUpdateAvailable.addListener(
  callback: function,
)

Deprecated

请使用 runtime.onRestartRequired

当 Chrome 更新可用时触发,但由于需要重新启动浏览器而不会立即安装。

PARAMETERS

  • callback

    function

    The callback parameter looks like:

    () => void

onConnect

chrome.runtime.onConnect.addListener(
  callback: function,
)

当从扩展进程或内容脚本(通过 runtime.connect)建立连接时触发。

PARAMETERS

  • callback

    function

    The callback parameter looks like:

    (port: Port) => void

onConnectExternal

chrome.runtime.onConnectExternal.addListener(
  callback: function,
)

当从另一个扩展(通过 runtime.connect)建立连接时触发。

PARAMETERS

  • callback

    function

    The callback parameter looks like:

    (port: Port) => void

onConnectNative

chrome.runtime.onConnectNative.addListener(
  callback: function,
)

Chrome 74+

当从本机应用程序建立连接时触发。目前仅支持 Chrome 操作系统。

PARAMETERS

  • callback

    function

    The callback parameter looks like:

    (port: Port) => void

onInstalled

chrome.runtime.onInstalled.addListener(
  callback: function,
)

在首次安装扩展程序、扩展程序更新到新版本以及 Chrome 更新到新版本时触发。

PARAMETERS

  • callback

    function

    The callback parameter looks like:

    (details: object) => void

    • details

      object

      • id

        string optional

        表示更新的导入共享模块扩展的ID。仅当“原因”为“shared_module_update”时才存在。

      • previousVersion

        string optional

        表示刚刚更新的扩展的先前版本。仅当“原因(reason)”为“更新(update)”时才存在。

      • reason

        OnInstalledReason

        正在调度此事件的原因。

onMessage

chrome.runtime.onMessage.addListener(
  callback: function,
)

当从扩展进程(通过 runtime.sendMessage)或内容脚本(通过 tabs.sendMessage)发送消息时触发。

PARAMETERS

  • callback

    function

    The callback parameter looks like:

    (message: any, sender: MessageSender, sendResponse: function) => boolean | undefined

    • message

      any

    • sender

      MessageSender

    • sendResponse

      function

      The sendResponse parameter looks like:

      () => void

    • returns

      boolean | undefined

onMessageExternal

chrome.runtime.onMessageExternal.addListener(
  callback: function,
)

从另一个扩展程序/应用程序(通过 runtime.sendMessage)发送消息时触发。不能在内容脚本中使用。

PARAMETERS

  • callback

    function

    The callback parameter looks like:

    (message: any, sender: MessageSender, sendResponse: function) => boolean | undefined

    • message

      any

    • sender

      MessageSender

    • sendResponse

      function

      The sendResponse parameter looks like:

      () => void

    • returns

      boolean | undefined

onRestartRequired

chrome.runtime.onRestartRequired.addListener(
  callback: function,
)

当应用程序或运行它的设备需要重新启动时触发。该应用程序应在方便的最早时间关闭其所有窗口,以便重新启动。如果应用程序不执行任何操作,则会在 24 小时宽限期过后强制重启。目前,此事件仅针对 Chrome 操作系统自助服务终端应用触发。

PARAMETERS

onStartup

chrome.runtime.onStartup.addListener(
  callback: function,
)

当安装了此扩展的配置文件首次启动时触发。启动隐身配置文件时,不会触发此事件,即使此扩展程序在“拆分(split)”隐身模式下运行。

PARAMETERS

  • callback

    function

    The callback parameter looks like:

    () => void

onSuspend

chrome.runtime.onSuspend.addListener(
  callback: function,
)

在卸载之前发送到事件页面。这为扩展程序提供了进行一些清理的机会。请注意,由于页面正在卸载,因此在处理此事件时启动的任何异步操作都不能保证完成。如果事件页面在卸载之前发生更多活动,则将发送 onSuspendCanceled 事件并且页面不会被卸载。

PARAMETERS

  • callback

    function

    The callback parameter looks like:

    () => void

onSuspendCanceled

chrome.runtime.onSuspendCanceled.addListener(
  callback: function,
)

在 onSuspend 之后发送,表示应用程序最终不会被卸载。

PARAMETERS

  • callback

    function

    The callback parameter looks like:

    () => void

onUpdateAvailable

chrome.runtime.onUpdateAvailable.addListener(
  callback: function,
)

当有可用更新但未立即安装时触发,因为应用程序当前正在运行。如果你什么都不做,更新将在下一次后台页面卸载时安装,如果你想更快地安装它,你可以显式调用 chrome.runtime.reload()。如果您的扩展程序使用持久的后台页面,那么后台页面当然永远不会被卸载,因此,除非您手动调用 chrome.runtime.reload() 以响应此事件,否则在 Chrome 下次重新启动之前不会安装更新。如果没有处理程序正在侦听此事件,并且您的扩展程序具有持久的后台页面,则它的行为就像调用 chrome.runtime.reload() 以响应此事件一样。

PARAMETERS

  • callback

    function

    The callback parameter looks like:

    (details: object) => void

    • details

      object

      • version

        string

        可用更新的版本号。

By.一粒技术服务

results matching ""

    No results matching ""