Есть ли способ получить параметры командной строки в расширении Google Chrome? - PullRequest
9 голосов
/ 04 января 2012

Мне нужно запустить Chrome из командной строки с пользовательским параметром, который содержит путь к некоторому js-файлу. В дальнейшем этот путь будет использоваться в расширение.

Я внимательно просмотрел всю связанную документацию и щелкнул все узлы в Chrome отладчик, но не нашел ничего, что может напоминать в командной строке параметры. Можно ли в любом случае получить эти параметры или нужно написать более сложное npapi-расширение? (теоретически в таких нпапи- Расширение мы можем получить сам процесс через Win-API, командной строки сам процесс и тд).

Ответы [ 5 ]

4 голосов
/ 15 июля 2015

Возможно, передайте путь к вашему расширению в пользовательской строке агента, установленной через командную строку. Например:

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

Тогда в вашем расширении:

var path = navigator.userAgent.split(":");
console.log(path[1])
4 голосов
/ 21 февраля 2012

Предупреждение о взломе: В этом сообщении предлагается передать поддельный URL для открытия, который имеет все параметры командной строки в качестве параметров строки запроса, например,

chrome.exe http://fakeurl.com/?param1=val1&param2=val2
3 голосов
/ 09 апреля 2014

В основном я использую технику, приведенную в ответе @ dfrankow , но вместо фальшивого URL открываю 127.0.0.1:0.У этого подхода есть два преимущества:

  1. Попытка разрешения имени пропущена. ОК, если я тщательно выбрал поддельный URL, чтобы избежать открытия существующего URL, разрешение имени будетпотерпеть неудачу наверняка.Но в этом нет необходимости, так почему бы просто не пропустить этот шаг?
  2. Ни один сервер не прослушивает TCP-порт 0. Недостаточно просто использовать 127.0.0.1, поскольку возможно, что веб-сервер работает на клиентском компьютере, а я нетхотите, чтобы расширение подключилось к нему случайно.Поэтому я должен указать номер порта, но какой именно?Порт 0 является идеальным выбором: в соответствии с RFC 1700 этот номер порта является «зарезервированным», то есть серверам не разрешено его использовать.

Пример командной строки для передачи аргументов abc и xyz вашему расширению:

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

Вы можете прочитать эти аргументы в background.js следующим образом:

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

Консольный вывод (в консоли фоновой страницы расширения):

{"abc":"42","xyz":"hello"} 
1 голос
/ 23 апреля 2012

Вы можете попробовать:

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

Это предполагает, что вы используете jQuery в своей последовательности загрузки, вы всегда можете заменить любой другой метод AJAX

0 голосов
/ 23 ноября 2015

В дополнение к ответам выше об использовании URL для передачи параметров обратите внимание, что это могут делать только расширения, а не приложения.Я опубликовал расширение Chrome, которое просто перехватывает URL-адрес и делает его доступным для другого приложения.

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

Исходный код доступен по адресу:

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

для Общедоступные экраны Wi-Fi

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...