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 将会被一个错误的消息拒绝。

浏览器兼容性

示例

这是一个 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