从扩展名与本机消息传递主机通信时出错

时间:2018-07-23 14:43:26

标签: javascript google-chrome google-chrome-extension

我需要将电话号码从网页传递到桌面拨号器。我有一个主机,它从background.js传递的页面中捕获电话号码:

var responseMessage = "";
chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
      console.log(request.phonenumber);
                chrome.runtime.sendNativeMessage('com.avvd.microsipcallfield', {text: request.phonenumber},function(response) {
    if (chrome.runtime.lastError) {
        responseMessage = chrome.runtime.lastError.message
        console.log(responseMessage);
    } else {
        responseMessage = response;
                }} )
      sendResponse(responseMessage);
  });

并将其发送到主机:

{
  "name": "com.avvd.microsipcallfield",
  "description": "Call Field Microsip host",
  "path": "C:\\Users\\All Users\\callFieldHost\\host.bat",
  "type": "stdio",
  "allowed_origins": [
    "chrome-extension://lbhgehbjeemkjmooaeopmfljahdoombd/"
  ]
}

Host.bat

java -jar HostDecoder.jar %*

通常,在暂时没有主机的情况下,会有一个应用程序从JSON打开对象并将其发送到拨号程序。然而 我写了简单的记录器,这是一个输出:

1argument: chrome-extension://lbhgehbjeemkjmooaeopmfljahdoombd/
2argument: --parent-window=0

当我尝试发送号码时,我会进入控制台 与本地消息传递主机通信时出错。以及如何看到没有数字传递给主机侦听器。 有人可以建议我去修理吗?

2 个答案:

答案 0 :(得分:0)

好的。还有另一个问题。我尝试读取传入的消息,但将稳定性设置为零。

private String read(InputStream in) throws IOException {
        byte[] length = new byte[4];
        in.read(length);
        int size = getInt(length);
        if (size == 0) {
            throw new InterruptedIOException("Zero size message");
        }

        byte[] message = new byte[size];
        in.read(b);

        return new String(message, "UTF-8");
    }

    private int getInt(byte[] bytes) {
        return  (bytes[3]<<24) & 0xff000000|
                (bytes[2]<<16) & 0x00ff0000|
                (bytes[1]<< 8) & 0x0000ff00|
                (bytes[0]<< 0) & 0x000000ff;
    }


我用本机消息发送对象

{text: 4325345423} 

在这种情况下我想念什么?

答案 1 :(得分:0)

我解决了问题。启动器中缺少@echo off没问题。