Собственные сообщения Chrome: может ли исходный исполняемый файл хоста начинаться с аргументов?

Можно ли запустить собственный хост с аргументами main (int argc, char ** argv)? Писать в background.js более разумно, но не существует API-интерфейса, подобного chrome.runtime.connectNative (строковое приложение, строковые аргументы). Существует только chrome.runtime.connectNative (строковое приложение).

1

Решение

Насколько мне известно, лучшее, что вы можете надеяться сделать, это создать файл .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 */ );
}
0

Другие решения

Я предположил, что ваш исполняемый файл будет jar, и это будет сторонний jar, тогда нижеприведенное может помочь переписать jar, чтобы принять postMessage.

  1. Создайте пользовательский URI и сделайте так, чтобы он попадал в отдельный файл bat
  2. Назовите это из фонового скрипта
  3. Внутри bat создайте файл блокнота и скопируйте аргументы или перезаписайте исполняемый файл bat аргументами
  4. connectNative к исполняемому файлу bat, который запускает jar-файл с аргументами или берет его из файла блокнота
0

Если ваши аргументы являются динамическими, вы можете создать небольшое собственное приложение для запуска, которое будет действовать как посредник. Он принимает аргументы, отправленные вашим расширением Chrome, и запускает основное нативное приложение с этими аргументами. Когда основное приложение запущено, расширение может обмениваться с ним сообщениями.

Если при обмене сообщениями с основным нативным приложением возникает проблема в описанном выше сценарии (я никогда не пробовал), вы можете передать больше обязанностей приложению-пускачу и позволить ему пересылать сообщения между основным нативным приложением и вашим расширением. ,

0