Cómo usar nodejs para abrir el navegador predeterminado y navegar a una URL específica

135

Estoy escribiendo una aplicación usando Node.js.

Una de las funciones que quiero crear es abrir el navegador web predeterminado y navegar a una URL específica.

Quiero que sea portátil para que se ejecute en Windows / Mac / Linux.

Qing Xu
fuente
3
Supongo que esta pregunta es lo que estás buscando: stackoverflow.com/questions/7664605/…
TomTasche
Sí, funciona en Mac. ¿Funciona en Windows y Linux? no tenía una máquina de ventanas en la mano
Qing Xu
1
xdg-open está funcionando en Linux :)
Qing Xu

Respuestas:

167

Use opn porque manejará el problema multiplataforma. Instalar:

$ npm install opn

Usar:

var opn = require('opn');

// opens the url in the default browser 
opn('http://sindresorhus.com');

// specify the app to open in 
opn('http://sindresorhus.com', {app: 'firefox'});
ForbesLindesay
fuente
ForbesLindesay la devolución de llamada se llama inmediatamente, en lugar de cuando se cierra la ventana. ¿Algunas ideas?
Sam Selikoff
2
No estoy seguro, podría valer la pena probar github.com/domenic/opener como un módulo alternativo con la misma API. Parece que tiene un rastreador de problemas adecuado en el que podría abrir un problema. Sin embargo, puede ser una rareza de cómo los navegadores informan que el proceso finaliza, por lo que puede no ser fácilmente reparable.
ForbesLindesay
1
Esta es una gran recomendación, funciona muy bien para el caso de uso descrito por el OP.
jbranchaud
2
Parece que el abridor funciona en Mac / Windows / Linux, mientras que abrir solo funciona en Mac / Windows, por lo que es preferible abrirlo.
Tom
2
Actualice para sugerir en opnlugar de openya que este último está en desuso ahora.
Samir Aguiar
43
var url = 'http://localhost';
var start = (process.platform == 'darwin'? 'open': process.platform == 'win32'? 'start': 'xdg-open');
require('child_process').exec(start + ' ' + url);
lexa-b
fuente
1
Debe tenerse en cuenta, en las ventanas, al menos, &que está en la dirección URL deben acompañarse^&
junvar
1
Envolví una lógica similar, la prometí y publiqué en npm npmjs.com/package/out-url
azhar22k
6

Nodo abierto está en desuso . Ahora usa opn :

const opn = require('opn')

opn('http://sindresorhus.com') // Opens the url in the default browser

//opn('http://sindresorhus.com', {app: 'firefox'}) // Specify the app to open in
Olivier C
fuente
3

Es posible que deba implementar un interruptor utilizando el valor de ...

require('os').type()

¿Y luego usar spawn("open")o spawn("xdg-open")dependiendo de la plataforma?

Soren
fuente
44
En Windows, intento spawn ("explorer.exe", [' stackoverflow.com'] ), el explorador de Windows seleccionará el navegador predeterminado para abrir la URL.
Qing Xu
@PaulIrish: Lamentablemente, su enlace está muerto ahora.
mklement0
2
@QingXu impresionante! require('child_process').spawn('explorer', ['url'])es un buen oneliner!
TWiStErRob
2

La manera más fácil y ordenada, en mi humilde opinión está utilizando un paquete npm llamado openurl . Hacer un npm install openurl. Podrías probar esto muy rápido en tu Nodejs REPL

require("openurl").open("http://stackoverflow.com/questions/8500326/how-to-use-nodejs-to-open-default-browser-and-navigate-to-a-specific-url")

También puede enviar correos electrónicos con él si surge la necesidad; require("openurl").open("mailto:[email protected]")

EL Taipan
fuente