11
votes

Y a-t-il un moyen d'obtenir des paramètres de ligne de commande dans l'extension de Google Chrome?

J'ai besoin de lancer Chrome à partir de la ligne de commande avec le paramètre personnalisé, qui Contient un chemin vers un fichier JS. Plus loin ce chemin sera utilisé dans Extension.

J'ai parcouru soigneusement toutes les documents connexes et cliqué sur tous les nœuds de Chrome débogueur, mais rien trouvé qui peut ressembler à la ligne de commande paramètres. Est-il possible de toute façon d'obtenir ces paramètres ou il est nécessaire écrire une extension NPAPI plus complexe? (théoriquement dans une telle NPAPI- extension que nous avons capable de bénéficier d'autonomie via Win-API, ligne de commande de auto-processus, etc.).


4 commentaires

FYI, l'approche NPAPI que vous avez décrite ne fonctionnera pas, car le plugin fonctionnerait dans un processus complètement différent (lancé par Chrome avec les paramètres de ligne de commande qu'il décide).


Vous avez tort et juste simultanément. J'ai déjà essayé un tel schéma et il est possible d'obtenir des informations sur le processus actuel séparé avec une extension. Cela signifie également qu'il existe un moyen d'obtenir des informations sur le processus parent et sur la ligne de commande du processus parent.


J'ai aussi trouvé une page spéciale chrome: // version. Cette page contient des informations exactes ce dont j'ai besoin - ligne de commande avec tous les commutateurs. J'ai essayé de déboguer cette page, mais je n'ai trouvé rien d'utile pour moi.


Les données affichées sur chrome: // version sont définies dans chrome: //version/strings.js mais les extensions ne sont pas autorisées à y accéder.


5 Réponses :


8
votes

Alerte de hack: Cet article suggère Passage d'une fausse URL à ouvrir possède tous les paramètres de ligne de commande en tant que paramètres de chaîne de requête, par exemple

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


2 commentaires

+1 merci! J'ai affiné cette approche un peu, pls. Consultez ma réponse. Je serais heureux d'entendre votre opinion.


Fonctionne ... peut également vouloir préfixer avec ./ comme ./ chrome.exe my_url



2
votes

Vous pouvez essayer:

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);
});


3 commentaires

Cette méthode ne fonctionne que si vous avez la page de version ouverte, pour résoudre ce problème, je voudrais envelopper le $ .post avec: chrome.tabs.create ({URL: versionPage, actif: false}, fonction () {});


Peut-être une fois que le message est terminé, vous pouvez alors fermer l'onglet :)


Cette technique utilisée pour fonctionner, mais pas sur Chrome 47. J'utilise maintenant la technique de -user-agents avec un grand succès.



3
votes

Fondamentalement, j'utilise la technique donnée dans @ Réponse de DFrankow , mais j'ouvre 127.0.0.1:0 au lieu d'une fausse URL. Cette approche présente deux avantages:

  1. La tentative de résolution du nom est ignorée. strong> OK, si j'ai choisi la fausse URL soigneusement pour éviter d'ouvrir une URL existante, la résolution du nom échouerait sans certitude. Mais il n'y a pas besoin pour cela, alors pourquoi ne pas simplement sauter cette étape? li>
  2. aucun serveur n'écoute sur le port TCP 0 code>. strong> en utilisant simplement 127.0.0.1 code> ne suffit pas, car il est possible qu'un serveur Web est possible. Sur la machine cliente, et je ne veux pas que l'extension se connecte accidentellement. Donc, je dois spécifier un numéro de port, mais lequel? Port 0 code> est le choix parfait: selon RFC 1700 Ce numéro de port est "réservé", c'est-à-dire que les serveurs ne sont pas autorisés à l'utiliser. li> ol>

    exemple de ligne de commande pour passer des arguments abc code> et xyz code> à votre extension: p> xxx pré> vous peut lire ces arguments en arrière-plan.js de cette façon: p>

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


0 commentaires

5
votes

Passez peut-être le chemin d'accès à votre poste dans une chaîne d'agent utilisateur personnalisé définie via la ligne de commande. Par exemple: xxx

puis, dans votre extension: xxx


0 commentaires

0
votes

Suite aux réponses ci-dessus sur l'utilisation de l'URL pour passer des paramètres dans, notez que seules des extensions, non des applications, peuvent le faire. J'ai publié une extension chromée qui intercepte simplement l'URL et la met à la disposition d'une autre application.

https://chrome.google.com/webstore/detail/gafgggdglmjplpklcfhcgfaeHecGG/

Le code source est disponible à:

https://github.com/appazur/kiosk-launcher

pour écrans d'affichage public Wi-Fi


2 commentaires

Les deux liens sont morts


Désolé, oui, j'ai changé pour utiliser la stratégie de groupe pour obtenir des paramètres à mon application, donc non publié.