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.


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

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

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?


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:janedoe@example.com")

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.