runtime.sendNativeMessage()

从扩展向原生应用程序发送单条消息。

这需要两个必填参数:原生应用程序的名称和一个 JSON 对象,该对象是要发送给它的消息。浏览器将启动原生应用程序并传递消息。

这是一个异步函数,它返回一个 Promise。原生应用程序发送的第一条消息被视为对 sendNativeMessage() 调用的响应,并且该承诺将使用此消息作为参数来履行。请注意,您无法使用 runtime.onMessage 获取来自应用程序的响应:您必须使用回调函数。

对于 runtime.sendNativeMessage() 的调用,将启动应用程序的新实例。浏览器将在收到回复后终止原生应用程序。要终止原生应用程序,浏览器将关闭管道,给进程几秒钟的时间正常退出,如果它尚未退出,则将其杀死。

有关更多信息,请参阅 原生消息传递

语法

js
let sending = browser.runtime.sendNativeMessage(
  application,             // string
  message                  // object
)

参数

application

string. 原生应用程序的名称。这必须与 原生应用程序清单文件 中的 "name" 属性匹配。

message

object. 将发送到原生应用程序的 JSON 对象。

返回值

一个 Promise。如果发送者发送了响应,则将使用响应作为 JSON 对象来履行。否则,它将不带任何参数来履行。如果在连接到原生应用程序时发生错误,则该承诺将使用错误消息被拒绝。

浏览器兼容性

BCD 表格仅在浏览器中加载

示例

以下是一个后台脚本,它在用户单击浏览器操作时向 "ping_pong" 应用程序发送 "ping" 消息并记录响应

js
function onResponse(response) {
  console.log(`Received ${response}`);
}

function onError(error) {
  console.log(`Error: ${error}`);
}

/*
On a click on the browser action, send the app a message.
*/
browser.browserAction.onClicked.addListener(() => {
  console.log("Sending:  ping");
  let sending = browser.runtime.sendNativeMessage("ping_pong", "ping");
  sending.then(onResponse, onError);
});

注意:此 API 基于 Chromium 的 chrome.runtime API。本文档源自 Chromium 代码中的 runtime.json