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。
语法
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" 应用并且把回复记录下来:
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
。