runtime.sendNativeMessage()

从 WebExtension 发送单条消息到 native application。

它需要两个强制的参数:native application 的名字和要发送给它的 JSON 对象。浏览器将会加载 native application 然后发送这个消息。

这是一个异步函数,返回一个 Promise对象。native application 发送的第一条消息将被当作sendNativeMessage() 的回复,并且 promise 将这个消息作为参数.。注意你不能使用 runtime.onMessage 从应用获取回复:你必须使用回调函数来替代。

每次调用 runtime.sendNativeMessage()都会生成一个新的实例。浏览器将会在收到回复后结束这个 native application。为了结束这个 native application,浏览器将会关闭 pipe,并给进程几秒的时间优雅的退出,如果它没有关闭就杀死它。

更对信息,参考 Native messaging

语法

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

参数

application

字符串类型。native application 的名字。它必须和 native application's manifest file中的‘name’字段一致。

message

对象类型。一个将要发送给 native application 的 JSON 对象。

返回值

一个 Promise对象。如果 native application 发送了一个回复,它将会填充回复的 JSON 对象作为参数。否则它不会填充参数。如果在 native application 连接期间发生了错误,promise 将会被一个错误的消息拒绝。

浏览器兼容性

BCD tables only load in the browser

示例

这是一个 background script,当使用者点击浏览器的 browser action 时,它会发送 "ping" 消息到 "ping_pong" 应用并且把回复记录下来:

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");
  var sending = browser.runtime.sendNativeMessage("ping_pong", "ping");
  sending.then(onResponse, onError);
});

备注:这个 API 基于 Chromium 的 chrome.runtime API。本文来自 Chromium 代码中的 runtime.json