1

希望您能够帮助我。我需要从 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"); 
});

警报有效,但没有其他任何反应。

4

0 回答 0