我创建了一个使用本机消息传递给主机的扩展程序。
扩展名的manifest.json是:
{
"manifest_version": 2,
"version": "1.0",
"name": "Native Messaging Example",
"description": "Send a message to a native application",
"permissions": [
"nativeMessaging"
],
"browser_action": {
"default_popup": "popup.html"
}
}
popup.html:
<html>
<head>
<script src="./main.js"></script>
</head>
<body>
<button id="buttonToPress">Press</button>
</body>
</html>
main.js文件:
var port = null;
function connect() {
port = chrome.runtime.connectNative('com.google.chrome.example.echo');
port.onMessage.addListener(function(message) {
alert(message);
port.disconnect();
});
port.onDisconnect.addListener(function() {
port = null;
alert(chrome.runtime.lastError.message);
});
var message = {
'filePath': 'C:\\Users\\username\\Desktop\\themes\\Wallpaper\\Architecture\\img13.jpg'
};
port.postMessage(message);
}
document.addEventListener('DOMContentLoaded', function() {
document.getElementById('buttonToPress').addEventListener('click', connect);
});
我有一个原生应用程序abc.exe
。
本机应用程序manifest.json:
{
"name": "com.google.chrome.example.echo",
"description": "Chrome Native Messaging API Example Host",
"path": "./abc.exe",
"type": "stdio",
"allowed_origins": [
"chrome-extensions://fegpbklgdffjmfjmhknpmgepbddbcghk/"
]
}
在注册人中,HKEY_CURRENT_USER\Software\Google\Chrome\NativeMessagingHosts\com.google.chrome.example.echo
的默认值为C:\Users\username\Desktop\Extension1\NativeApp\manifest.json
(这是清单文件实际存在的位置)。
问题是,每次我运行它时,它都会说:&#39;指定的本机消息主机未找到&#39; ...我重新检查了我的代码,它似乎是很好,就像谷歌的原生信息指南一样。调试器控制台中记录的错误是:&#39;未捕获错误:尝试使用断开连接的端口对象&#39; ,我不知道它保留的原因发生。
此外,在chrome.runtime.connectNative
之后,.exe无法启动(在任务管理器中查看之后),并且它似乎喜欢那些与代码无关但更有可能在配置。
我需要一些帮助才能搞清楚,所以任何帮助都会有用!
由于
答案 0 :(得分:1)
请注意,allowed_origins中列出的chrome扩展名必须以/
结尾错误代码(不带/):
"allowed_origins": [
"chrome-extension://acajlpgjiolkocfooiankmegidcifefo"
]
正确的代码:
"allowed_origins": [
"chrome-extension://acajlpgjiolkocfooiankmegidcifefo/"
]
答案 1 :(得分:0)
我不确定相对路径是否适用于Native Host清单。
无论如何,如果你与example in the docs进行比较,你就会使用错误的斜线。
答案 2 :(得分:0)
我设法解决了问题。我再次从头开始创建整个包,并以小写形式设置主机应用程序的名称。我也在'CURRENT_USER'中设置了注册表中的密钥,它运行良好。我猜也许主机名应该是小写但除此之外我不知道我哪里出错了。非常感谢大家的帮助!我很欣赏它!