Come utilizzare nodejs per aprire il browser predefinito e navigare verso un URL specifico


135

Sto scrivendo un'applicazione usando Node.js.

Una delle funzioni che voglio creare è aprire il browser Web predefinito e navigare verso un URL specifico.

Voglio che sia portatile in modo che funzioni su Windows / Mac / Linux.


3
Credo che questa domanda è quello che stai cercando: stackoverflow.com/questions/7664605/...
TomTasche

sì, funziona su Mac. funziona in Windows e Linux? non avevo in mano una macchina per finestre
Qing Xu,

1
xdg-open funziona su Linux :)
Qing Xu,

Risposte:


167

Usa opn perché gestirà il problema multipiattaforma. Installare:

$ npm install opn

Usare:

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 il callback viene chiamato immediatamente, anziché quando la finestra viene chiusa. Qualche idea?
Sam Selikoff

2
Non sono sicuro, potrebbe valere la pena provare github.com/domenic/opener come modulo alternativo con la stessa API. Sembra che abbia un tracker di problemi corretto su cui potresti aprire un problema. Potrebbe essere solo una stranezza del modo in cui i browser segnalano che il processo sta terminando, quindi potrebbe non essere facilmente risolvibile.
ForbesLindesay

1
Questa è un'ottima raccomandazione, funziona molto bene per il caso d'uso descritto dal PO.
jbranchaud,

2
Sembra che l'apri funziona su Mac / Windows / Linux mentre open funziona solo su Mac / Windows, quindi è preferibile aprire.
Tom,

2
Si prega di aggiornare per suggerire opninvece che opencome ora è deprecato.
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
Va notato, almeno su Windows, che &nell'URL deve essere evitato^&
junvar

1
Ho avvolto una logica simile, l'ho promessa e pubblicato su npm npmjs.com/package/out-url
azhar22k

6

nodo aperto è deprecato . Ora 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

Potrebbe essere necessario implementare uno switch usando il valore di ...

require('os').type()

E quindi utilizzare spawn("open")o in spawn("xdg-open")base alla piattaforma?


4
In Windows, provo spawn ("explorer.exe", [' stackoverflow.com'] ), Windows Explorer selezionerà il browser predefinito per aprire l'URL.
Qing Xu,

@PaulIrish: Purtroppo, il tuo link è morto ora.
mklement0

2
@QingXu fantastico! require('child_process').spawn('explorer', ['url'])è un buon oneliner!
TWiStErRob,

2

Il modo più semplice e accurato, IMHO utilizza un pacchetto npm chiamato openurl . Fare un npm install openurl. Potresti provare così velocemente nel tuo REPL di Nodejs

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

Puoi anche inviare e-mail con esso se se ne presenta la necessità; require("openurl").open("mailto:janedoe@example.com")

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.