Como usar o nodejs para abrir o navegador padrão e navegar para uma URL específica

135

Estou escrevendo um aplicativo usando Node.js.

Uma das funções que desejo criar é abrir o navegador da web padrão e navegar para um URL específico.

Eu quero que ele seja portátil para rodar em Windows / Mac / Linux.

Qing Xu
fonte
3
Eu acho que essa pergunta é o que você está procurando: stackoverflow.com/questions/7664605/…
TomTasche 14/12/11
Sim, funciona no Mac. funciona no Windows e Linux? eu não tenho uma máquina de janela na mão
Qing Xu
1
xdg-open está trabalhando no Linux :)
Qing Xu

Respostas:

167

Use opn porque ele resolverá o problema de plataforma cruzada. Para 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
fonte
ForbesLindesay dizer que o retorno de chamada está sendo chamado imediatamente, em vez de quando a janela é fechada. Alguma ideia?
Sam Selikoff
2
Não tenho certeza, pode valer a pena tentar o github.com/domenic/opener como um módulo alternativo com a mesma API. Parece que ele possui um rastreador de problemas adequado no qual você pode abrir um problema. Pode ser apenas uma esquisitice de como os navegadores relatam o processo como finalizado, portanto, pode não ser facilmente corrigível.
precisa saber é o seguinte
1
Essa é uma ótima recomendação, funciona muito bem para o caso de uso descrito pelo OP.
jbranchaud
2
Parece que o opener funciona no Mac / Windows / Linux, enquanto o open funciona apenas no Mac / Windows, portanto é preferível o opener.
Tom
2
Atualize para sugerir, em opnvez de openo último ser descontinuado agora.
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
fonte
1
Deve-se notar que, pelo menos nas janelas, &o URL deve ser escapado com^&
junvar 21/08/19
1
Eu envolvi uma lógica semelhante, prometi-a e publiquei em npm npmjs.com/package/out-url
azhar22k
6

O nó aberto está obsoleto . Agora use 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
fonte
3

Pode ser necessário implementar um switch usando o valor de ...

require('os').type()

E então usar spawn("open")ou spawn("xdg-open")dependendo da plataforma?

Soren
fonte
4
No Windows, eu tento aparecer ("explorer.exe", [' stackoverflow.com'] ), o Windows Explorer selecionará o navegador padrão para abrir a URL.
Qing Xu
@PaulIrish: Infelizmente, seu link está morto agora.
mklement0
2
@QingXu awesome! require('child_process').spawn('explorer', ['url'])é um bom oneliner!
TWIStErRob
2

A maneira mais fácil e organizada, o IMHO está usando um pacote npm chamado openurl . Faça um npm install openurl. Você pode tentar isso rapidamente no seu Nodejs REPL

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

Você também pode enviar e-mails com ele, se necessário; require("openurl").open("mailto:[email protected]")

EL Taipan
fonte