В основном я использую технику, приведенную в ответе @ dfrankow , но вместо фальшивого URL открываю 127.0.0.1:0
.У этого подхода есть два преимущества:
- Попытка разрешения имени пропущена. ОК, если я тщательно выбрал поддельный URL, чтобы избежать открытия существующего URL, разрешение имени будетпотерпеть неудачу наверняка.Но в этом нет необходимости, так почему бы просто не пропустить этот шаг?
- Ни один сервер не прослушивает 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"}