从Chrome本机Messaging API调用节点应用程序

时间:2014-05-12 23:03:49

标签: node.js google-chrome-extension

Barebones Sample

我有一个扩展程序,我在开发人员模式下加载(尝试打包和解压扩展)。它由三部分组成:

  1. 的manifest.json
  2. main.html中
  3. main.js
  4. 一个应用程序本身由三部分组成:

    1. app.js
    2. app.bat
    3. node.json
    4. 期望状态

      当我从命令行运行node app.js时,程序按预期运行。

      app.js源代码:

      var fs = require('fs');
      var util = require('util');
      var encoding = "utf8";
      var launch = new Date();
      var logFile = "C:\\Users\\Jason.Nichols\\Desktop\\Node\\log.txt"
      
      function fileLog(arg){
          var d = new Date();
          var e = d.toString() + " ";
          if(typeof arg != 'string'){
              arg = util.inspect(arg)
          }
          fs.appendFileSync(logFile, "    " + e + arg + "\n");
      }
      
      
      fileLog("Process Launched");
      
      try {
      
          process;
      
          fileLog("Process exists");
      
      
          process.stdin.on('readable', function() {
            var chunk = process.stdin.read();
      
            if (chunk !== null) {
              fileLog(chunk);
              process.stdout.write('{"data": "' + chunk +'"}');
            }
          });
      
          process.stdin.on('end', function() {
            fileLog("EOL")
            process.stdout.write('end');
          });
      
          fileLog("Resume")
          process.stdin.resume();
      
      
      }catch(e){
          fileLog(e);
      }
      
      fileLog("Leaving");
      

      正如你所看到的那样,并没有做任何花哨的事情,而且在命令行中它只会回复它所得到的任何东西。

      我可以在logfile.txt中看到我的所有日​​志,通常会有欢乐。

      然而...

      在我的扩展程序的上下文中运行时,我得到:

      18:06:21:031 Connecting to native messaging host com.google.chrome.node.sample
      18:06:21:065 Completed connecting to native messaging host com.google.chrome.node.sample (31ms)
      18:06:21:185 Failed to connect: Native host has exited. (150ms)
      

      在我的浏览器中。

      当我通过fileLog进一步检查时,我发现当chrome通过app.bat运行文件时,我的logFile会收到以下错误:

      Mon May 12 2014 18:43:55 GMT-0400 (Eastern Daylight Time) { [Error: EINVAL, invalid argument] errno: 18, code: 'EINVAL', syscall: 'uv_pipe_open' }
      

      这绝对不好。

      我的问题:

      什么是errno: 18,为什么它只在Chrome中运行而不是从命令行运行?如果有任何帮助我运行Win7x64,Chrome 34和节点0.10.26。

      我的直觉是这个问题与SIGPIPE或从Chrome发送到我的Node进程的其他信号有关,但就我所怀疑的而言。任何帮助都会非常感激,因为我从通过nativeMessage运行的Python脚本中获得相同类型的行为(显然不是相同的错误代码,但是浏览器会触发onDisconnect事件及其绑定的侦听器)。

      其它

      我已设置相应的注册表值,可以查看其他文件here

0 个答案:

没有答案