我正在尝试使用Chrome扩展本机消息传递功能。我运行了C#程序,它将使用标准输出写入数据。在chrome扩展程序background.js文件中,从未触发chrome.runtime.onConnectExternal.addListener()。 在Chrome扩展程序页面中,出现以下错误:
Unchecked runtime.lastError: Error when communicating with the native messaging host.
Context_generated_background_page.html
Stack Trace
_generated_background_page.html:0 (anonymous function)
以下是有关测试项目的信息。
C#应用程序。该方法甚至在应用程序中触发后也会被调用。
public static void Write(JToken data)
{
var json = new JObject();
json["data"] = data;
var bytes = System.Text.Encoding.UTF8.GetBytes(json.ToString(Formatting.None));
/*
foreach (var b in bytes)
Console.WriteLine(b);
*/
var stdout = Console.OpenStandardOutput();
stdout.WriteByte((byte)((bytes.Length >> 0) & 0xFF));
stdout.WriteByte((byte)((bytes.Length >> 8) & 0xFF));
stdout.WriteByte((byte)((bytes.Length >> 16) & 0xFF));
stdout.WriteByte((byte)((bytes.Length >> 24) & 0xFF));
stdout.Write(bytes, 0, bytes.Length);
stdout.Flush();
}
background.js(更新1)
var port = chrome.runtime.connectNative('applistener');
port.onMessage.addListener(function(msg) {
console.log("Received" + msg);
});
port.onDisconnect.addListener(function() {
console.log("Disconnected");
});
Chrome扩展清单文件(manifest.json)。
"permissions": [ "nativeMessaging","activeTab", "declarativeContent", "storage"],
本机应用程序清单文件。(almanifest.json)
{
"name": "applistener",
"description": "Chrome native messaging test",
"path": "C:\\Users\\xyz\\_test\\AppListener\\AppListener\\bin\\Release\\AppListener.exe",
"type": "stdio",
"allowed_origins": [ "chrome-extension://xxxxxmanextensionidxxxxxx/"]
}
创建注册表项。 遵循了来自{https://developer.chrome.com/extensions/nativeMessaging#native-messaging-host-location
我可以从Computer \ HKEY_CURRENT_USER \ Software \ Google \ Chrome \ NativeMessagingHosts \ applistener中看到密钥
我假设当事件在本机应用中触发时,在chrome扩展程序background.js中,应触发监听器事件。但是我没有看到那个事件被触发。
Update1: 使用Google文档中的代码示例更改background.js中的代码。触发了port.onDisconnect.addListener()事件,仍然显示错误:
Unchecked runtime.lastError: Error when communicating with the native messaging host.
我现在正在尝试缩小问题范围。我猜我的注册表项设置正确吗?问题并在本机应用程序中写入方法?