希望您能够帮助我。我需要从 Chrome 扩展中调用一个可执行 jar。通过研究,我发现https://developer.chrome.com/extensions/messaging#native-messaging是要走的路。
所以我首先编辑了我的扩展清单并添加了:
"permissions": [
"nativeMessaging"
],
我可以在扩展概述中看到,该权限已被授予。
当我在 Windows 上操作时,我添加了一个注册表项:HKEY_LOCAL_MACHINE\SOFTWARE\Google\Chrome\NativeMessagingHosts\myextension:C:\path\to\myextension.json
“myextension.json”包含:
{
"name": "myextension",
"description": "my extension",
"path": "myextension.bat",
"type": "stdio",
"allowed_origins": [
"chrome-extension://[key]/"
]
}
myextension.bat 包含:
@echo off
cd %windir%\system32
start calc.exe
(测试只是想启动计算器)
在我的扩展程序的 js 中,我尝试通过以下方式调用它:
var port = null;
var hostName = "myextension";
[...]
$(this).children(".abc").click(function() {
//alert("test");
port = chrome.runtime.connectNative(hostName);
alert(port);
message = {"text": "nachricht"};
port.postMessage(message);
});
但什么也没有发生。第一个警报“测试”将被执行。但除此之外什么都没有发生。
我真的不知道如何调试它,因为我通过执行它没有得到任何反馈。希望您能够帮助我。
/edit 刚刚看到我得到:“Uncaught TypeError: undefined is not a function (anonymous function)”在:
port = chrome.extension.connectNative(hostName);
或者
port = chrome.runtime.connectNative(hostName);
/edit 2 好的,现在当我在浏览器中使用一个按钮时,它可以工作了:chrome.browserAction.onClicked.addListener(function() {
chrome.extension.connectNative('fbehost');
});
但是当我想从网站上的一个按钮调用它时它不起作用:
$(this).children(".abc").click(function() {
alert("Test");
port = chrome.extension.connectNative("fbehost");
});
警报有效,但没有其他任何反应。