Básicamente uso la técnica dada en @dfrankow's answer, pero abro 127.0.0.1:0
en lugar de una URL falsa. Este enfoque tiene dos ventajas:
- Se omitió el intento de resolución del nombre. OK, si he elegido la URL falsa atentamente para evitar abrir una URL existente, la resolución del nombre fallaría con seguridad. Pero no es necesario, ¿por qué no saltarse este paso?
- Ningún servidor escucha en el puerto TCP
0
. Usar simplemente 127.0.0.1
no es suficiente, ya que es posible que un servidor web se ejecute en la máquina cliente, y no quiero que la extensión se conecte accidentalmente. Entonces, tengo que especificar un número de puerto, pero ¿cuál? El puerto 0
es la opción perfecta: de acuerdo con RFC 1700, este número de puerto está "reservado", es decir, los servidores no pueden usarlo.
línea de comandos ejemplo, para pasar argumentos abc
y xyz
a su extensión:
chrome "http://127.0.0.1:0/?abc=42&xyz=hello"
Puede leer estos argumentos en background.js esta manera:
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));
});
});
salida de la consola (en el consola de la página de fondo de la extensión):
{"abc":"42","xyz":"hello"}
FYI, el enfoque NPAPI que describes no va a funcionar, porque el plugin se ejecuta en una proceso completamente diferente (lanzado por Chrome con parámetros de línea de comando decide). – smorgan
Estás equivocado y correcto al mismo tiempo. Probé ese esquema ya, y es posible obtener información sobre el proceso actual separado con la extensión. Significa que también hay una forma de obtener información sobre el proceso principal y sobre la línea de comando del proceso principal como resultado. – MontyBurns
También encontré la página especial chrome: // version. Esta página contiene información exacta de lo que necesito - línea de comando con todos los interruptores. Intenté depurar esta página, pero no encontré nada útil para mí. – MontyBurns