2012-01-04 14 views
8

Ho bisogno di avviare Chrome da riga di comando con parametro personalizzato, che contiene il percorso di alcuni file js. Inoltre questo percorso verrà utilizzato nell'estensione .C'è un modo per ottenere i parametri della riga di comando nell'estensione di Google Chrome?

Ho sfogliato con attenzione tutta la documentazione relativa e ho fatto clic su tutti i nodi nel debugger di Chrome , ma non ho trovato nulla che possa essere simile ai parametri della riga di comando . È comunque possibile ottenere questi parametri o è necessario scrivere più complessi npapi-extension? (teoricamente in tale estensione npapi- siamo in grado di ottenere il processo autonomo tramite win-api, riga di comando del processo automatico e così via).

+0

Cordiali saluti, l'approccio NPAPI hai descritto non funziona, perché il plugin sarebbe in esecuzione in un processo completamente diverso (lanciato da Chrome con i parametri della riga di comando su cui decide). – smorgan

+0

Hai torto e ragione contemporaneamente. Ho già provato questo schema ed è possibile ottenere informazioni sul processo corrente separato con estensione. Significa che c'è anche modo di ottenere informazioni sul processo genitore e sulla riga di comando del processo genitore come risultato. – MontyBurns

+0

Inoltre ho trovato la pagina speciale chrome: // versione. Questa pagina contiene informazioni esatte di cui ho bisogno - riga di comando con tutti gli switch. Ho provato a eseguire il debug di questa pagina, ma non ho trovato nulla di utile per me. – MontyBurns

risposta

4

Hack avviso: this post suggerisce il superamento di un URL falso per aprire che ha tutti i parametri della riga di comando come parametri di stringa di query, ad esempio,

chrome.exe http://fakeurl.com/?param1=val1&param2=val2 
+0

+1 Grazie! Ho raffinato un po 'questo approccio, pls. controlla la mia risposta. Sarei felice di sentire la tua opinione. – kol

1

Si potrebbe provare:

var versionPage = "chrome://version/strings.js"; 
$.post(versionPage, function(data){ 
    data = data.replace("var templateData = ", ""); 
    data = data.slice(0, -1); 
    var jsonOb = $.parseJSON(data); 
    alert(jsonOb.command_line); 
}); 

Ciò presuppone stai usando jQuery nella sequenza di caricamento, puoi sempre sostituire con qualsiasi altro metodo AJAX

+0

Questo metodo funziona solo se hai aperto la pagina di versione, per risolvere il problema vorrei avvolgere $ .post con: 'chrome.tabs.create ({url: versionPage, active: false}, function() { }) – Bloafer

+0

Forse una volta completato il post è possibile chiudere la scheda :) – Bloafer

+0

questa tecnica è utilizzata per funzionare, ma non più su chrome 47. Ora sto utilizzando la tecnica --user-agent con grande successo. –

3

Fondamentalmente uso la tecnica indicata in @dfrankow's answer, ma apro 127.0.0.1:0 invece di un falso URL. Questo approccio presenta due vantaggi:

  1. Il tentativo di risoluzione del nome viene saltato. OK, se ho scelto attentamente l'URL fasullo per evitare di aprire un URL esistente, la risoluzione del nome fallirebbe di sicuro. Ma non ce n'è bisogno, quindi perché non saltare questo passaggio?
  2. Nessun server in ascolto sulla porta TCP 0. Utilizzare semplicemente 127.0.0.1 non è sufficiente, poiché è possibile che un server Web venga eseguito sul computer client e non desidero che l'estensione si connetta accidentalmente. Quindi devo specificare un numero di porta, ma quale? La porta 0 è la scelta perfetta: in base a RFC 1700, questo numero di porta è "riservato", ovvero i server non sono autorizzati a utilizzarlo.

riga di comando di esempio per passare argomenti abc e xyz al proprio interno:

chrome "http://127.0.0.1:0/?abc=42&xyz=hello" 

Si può leggere questi argomenti in background.js questo modo:

chrome.windows.onCreated.addListener(function (window) { 
    chrome.tabs.query({}, function (tabs) { 
     var args = { abc: null, xyz: null }, argName, regExp, match; 
     for (argName in args) { 
      regExp = new RegExp(argName + "=([^\&]+)") 
      match = regExp.exec(tabs[0].url); 
      if (!match) return; 
      args[argName] = match[1]; 
     } 
     console.log(JSON.stringify(args)); 
    }); 
}); 

uscita della console (nel console della pagina di sfondo dell'estensione):

{"abc":"42","xyz":"hello"} 
4

È possibile passare il percorso all'estensione in una stringa di agente utente personalizzata impostata tramite la riga di comando. Per esempio:

chrome.exe --user-agent='Chrome 43. My path is:/path/to/file' 

Poi, nel proprio interno:

var path = navigator.userAgent.split(":"); 
console.log(path[1]) 
Problemi correlati