Cara menggunakan nodejs untuk membuka browser default dan menavigasi ke URL tertentu

146

Saya sedang menulis aplikasi menggunakan Node.js.

Salah satu fungsi yang ingin saya buat adalah membuka browser web default dan menavigasi ke URL tertentu.

Saya ingin ini portabel sehingga berjalan di Windows / Mac / Linux.

Qing Xu
sumber
3
Saya kira pertanyaan ini adalah yang Anda cari: stackoverflow.com/questions/7664605/…
TomTasche
ya, ini berfungsi di Mac. apakah itu bekerja di Windows dan Linux? saya tidak memiliki mesin jendela di tangan
Qing Xu
1
xdg-open bekerja di Linux :)
Qing Xu

Jawaban:

179

Gunakan open (sebelumnya dikenal sebagai opn) karena akan menangani masalah lintas platform. Untuk memasang:

$ npm install open

Menggunakan:

const open = require('open');

// opens the url in the default browser 
open('http://sindresorhus.com');
 
// specify the app to open in 
open('http://sindresorhus.com', {app: 'firefox'});
ForbesLindesay
sumber
ForbesLindesay callback dipanggil segera, bukan ketika jendela ditutup. Ada ide?
Sam Selikoff
2
Tidak yakin, mungkin ada baiknya mencoba github.com/domenic/opener sebagai modul alternatif dengan API yang sama. Sepertinya ada pelacak masalah yang tepat untuk membuka masalah. Ini mungkin hanya keanehan bagaimana browser melaporkan proses sebagai berakhir, jadi mungkin tidak mudah diperbaiki.
ForbesLindesay
1
Ini adalah rekomendasi yang bagus, bekerja dengan sangat baik untuk kasus penggunaan yang dijelaskan oleh OP.
jbranchaud
2
Sepertinya pembuka berfungsi di Mac / Windows / Linux sedangkan buka hanya berfungsi di Mac / Windows jadi pembuka lebih disukai.
Tom
Ini berfungsi untuk saya, tetapi tampaknya proses anak tidak terlepas, jadi ketika server turun, begitu juga firefox saya! Tidak yakin bagaimana menjadi "terbuka" untuk melepaskan proses anak ... ada ide?
sidewinderguy
51
var url = 'http://localhost';
var start = (process.platform == 'darwin'? 'open': process.platform == 'win32'? 'start': 'xdg-open');
require('child_process').exec(start + ' ' + url);
lexa-b
sumber
2
Harus diperhatikan, setidaknya di windows, &di URL harus di-escape dengan^&
junvar
1
Saya membungkus logika yang sama, menjanjikannya dan menerbitkannya ke npm npmjs.com/package/out-url
azhar22k
8

node-open tidak digunakan lagi . Sekarang gunakan 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
sumber
4

Anda mungkin perlu menerapkan sakelar menggunakan nilai ...

require('os').type()

Lalu gunakan spawn("open")atau spawn("xdg-open")bergantung pada platformnya?

Soren
sumber
4
Di windows, saya coba spawn ("explorer.exe", [' stackoverflow.com'] ), windows explorer akan memilih browser default untuk membuka URL.
Qing Xu
@PaulIrish: Sayangnya, tautan Anda sudah mati sekarang.
mklement0
2
@IngXing luar biasa! require('child_process').spawn('explorer', ['url'])adalah perjalanan yang bagus!
TWiStErRob
2

Cara termudah dan paling rapi, IMHO menggunakan paket npm bernama openurl . Lakukan npm install openurl. Anda dapat mencoba ini dengan sangat cepat di Nodejs REPL Anda

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

Anda juga dapat mengirim email dengannya jika diperlukan; require("openurl").open("mailto:[email protected]")

EL Taipan
sumber