chrome native messaging:本机主机可执行文件可以以参数开头吗?

时间:2015-11-02 09:01:36

标签: c++ google-chrome chrome-native-messaging

是否可以使用main(int argc,char ** argv)参数启动本机主机?在background.js中编写更合理,但没有像chrome.runtime.connectNative(string application,string [] arguments)那样的api。只有chrome.runtime.connectNative(字符串应用程序)。

3 个答案:

答案 0 :(得分:0)

据我所知,您可以做的最好的事情是创建一个.bat文件(或等效文件)并从那里传递参数。如果你想要从扩展中传递动态数据(你不能硬编码到启动器脚本文件中),那么你需要开发一个协议来启动启动序列以确保你的参数已被处理,例如。

   var startupDone = false,
       port = chrome.runtime.connectNative( 'my.native.app' );

   port.onMessage.addListener( function( msg ) { 
      if ( msg.type === 'startupResponse' && msg.done ) startupDone = true;
      else {
         // process normal messages
      }
   } );
   port.postMessage( { type: 'startupRequest', params: [] } );
   ...
   if ( startupDone ) {
      port.postMessage( /* non-startup message */ );
   }

答案 1 :(得分:0)

我假设您的可执行文件是jar并且它是第三方jar,然后下面可能有帮助否则重写jar以接受postMessage可能是最佳解决方案

  1. 创建自定义URI并使其点击单独的bat文件
  2. 从后台脚本调用
  3. 在bat内创建一个记事本文件并复制你的参数或用参数覆盖你的可执行bat文件
  4. connectNative到可执行的bat,它将使用参数启动jar或从记事本文件中取出

答案 2 :(得分:0)

如果您的参数是动态的,您可以创建一个小型启动器本机应用程序,就像中间人一样。它接收Chrome扩展程序发送的参数,并使用这些参数启动主本机应用程序。启动主应用程序后,扩展程序可以与其交换消息。

如果在上面的场景中与主本机应用程序交换消息有任何问题(我从未尝试过),您可以为启动器应用程序提供更多职责,并让它在主本机应用程序之间来回传递消息和你的扩展。