Jak używać nodejs do otwierania domyślnej przeglądarki i przechodzenia do określonego adresu URL

135

Piszę aplikację przy użyciu Node.js.

Jedną z funkcji, które chcę utworzyć, jest otwarcie domyślnej przeglądarki internetowej i przejście do określonego adresu URL.

Chcę, aby był przenośny, aby działał w systemie Windows / Mac / Linux.

Qing Xu
źródło
3
Myślę, że to pytanie jest tym, czego szukasz: stackoverflow.com/questions/7664605/ ...
TomTasche,
tak, to działa na Macu. czy to działa w systemie Windows i Linux? nie miałem w ręku maszyny do okien
Qing Xu
1
xdg-open działa w Linuksie :)
Qing Xu

Odpowiedzi:

167

Użyj opn, ponieważ rozwiąże problem między platformami. Żeby zainstalować:

$ npm install opn

Używać:

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'});
Forbes Lindesay
źródło
ForbesLindesay, wywołanie zwrotne jest wywoływane natychmiast, zamiast po zamknięciu okna. Jakieś pomysły?
Sam Selikoff
2
Nie jestem pewien, może warto wypróbować github.com/domenic/opener jako alternatywny moduł z tym samym API. Wygląda na to, że ma odpowiednie narzędzie do śledzenia problemów, w którym można je otworzyć. Może to być po prostu dziwne, jak przeglądarki zgłaszają zakończenie procesu, więc może to nie być łatwe do naprawienia.
ForbesLindesay,
1
To świetna rekomendacja, działa bardzo dobrze w przypadku użycia opisanym przez OP.
jbranchaud
2
Wygląda na to, że otwieracz działa na Mac / Windows / Linux, podczas gdy otwarty działa tylko na Mac / Windows, więc otwieracz jest lepszy.
Tom
2
Zaktualizuj, aby sugerować opnzamiast, openponieważ ta ostatnia jest obecnie przestarzała.
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
źródło
1
Należy zauważyć, że przynajmniej w oknach &adres URL powinien być ^&
poprzedzony znakami
1
Zapakowałem podobną logikę, obiecałem ją i opublikowałem na npm npmjs.com/package/out-url
azhar22k
6

node-open jest przestarzałe . Teraz użyj 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
źródło
3

Może być konieczne zaimplementowanie przełącznika przy użyciu wartości ...

require('os').type()

A potem użyć spawn("open")lub w spawn("xdg-open")zależności od platformy?

Soren
źródło
4
W systemie Windows spróbuję spawn („explorer.exe”, [' stackoverflow.com'] ), eksplorator Windows wybierze domyślną przeglądarkę do otwarcia adresu URL.
Qing Xu
@PaulIrish: Niestety, Twój link jest teraz martwy.
mklement0
2
@QingXu awesome! require('child_process').spawn('explorer', ['url'])to fajny oneliner!
TWiStErRob
2

Najłatwiejszym i najładniejszym sposobem IMHO jest użycie pakietu npm o nazwie openurl . Zrób npm install openurl. Możesz spróbować tego naprawdę szybko w swoim REPL Nodejs

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

Możesz również wysyłać za jego pomocą e-maile, jeśli zajdzie taka potrzeba; require("openurl").open("mailto:[email protected]")

EL Taipan
źródło