Как использовать nodejs, чтобы открыть браузер по умолчанию и перейти к определенному URL

135

Я пишу приложение, используя Node.js.

Одна из функций, которую я хочу создать, - открыть веб-браузер по умолчанию и перейти к определенному URL.

Я хочу, чтобы он был переносимым, чтобы он работал на Windows / Mac / Linux.

Цин Сюй
источник
3
Я думаю, этот вопрос - то, что вы ищете: stackoverflow.com/questions/7664605/…
TomTasche
да, это работает в Mac. это работает в Windows и Linux? у меня не было оконной машины в руке
Цин Сюй
1
xdg-open работает в Linux :)
Qing Xu

Ответы:

167

Используйте opn, потому что он решит кросс-платформенную проблему. Установить:

$ npm install opn

Использовать:

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
источник
ForbesLindesay обратный вызов вызывается сразу, а не когда окно закрыто. Любые идеи?
Сэм Селикофф
2
Не уверен, что стоит попробовать github.com/domenic/opener в качестве альтернативного модуля с тем же API. Похоже, у него есть соответствующий трекер, на котором вы можете открыть проблему. Это может быть просто странностью того, как браузеры сообщают, что процесс завершается, поэтому его трудно исправить.
ForbesLindesay
1
Это отличная рекомендация, она очень хорошо работает для случая использования, описанного в OP.
jbranchaud
2
Похоже, что opener работает на Mac / Windows / Linux, тогда как open работает только на Mac / Windows, поэтому он лучше.
Том
2
Пожалуйста, обновите, чтобы предложить opnвместо того, openчтобы последнее не рекомендуется сейчас.
Самир Агиар
43
var url = 'http://localhost';
var start = (process.platform == 'darwin'? 'open': process.platform == 'win32'? 'start': 'xdg-open');
require('child_process').exec(start + ' ' + url);
Lexa-б
источник
1
Следует отметить, что по крайней мере на окнах, &в URL должен быть экранирован^&
junvar
1
Я обернул подобную логику, пообещал ее и опубликовал в npm npmjs.com/package/out-url
azhar22k
6

открытый узел устарел . Теперь используйте 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

Возможно, вам потребуется реализовать переключатель, используя значение ...

require('os').type()

А потом использовать spawn("open")или в spawn("xdg-open")зависимости от платформы?

Сорен
источник
4
В Windows я пробую spawn ("explorer.exe", [' stackoverflow.com'] ), Windows Explorer выберет браузер по умолчанию, чтобы открыть URL.
Цин Сюй
@PaulIrish: К сожалению, ваша ссылка сейчас мертва.
mklement0
2
@ QingXu потрясающе! require('child_process').spawn('explorer', ['url'])хороший приятель!
TWiStErRob
2

Самый простой и удобный способ, IMHO, использовать пакет npm, называемый openurl . Сделать а npm install openurl. Вы можете попробовать это по-настоящему быстро в вашем Nodejs REPL

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

Вы также можете отправить электронное письмо с ним, если возникнет такая необходимость; require("openurl").open("mailto:janedoe@example.com")

Е.Л. Тайпан
источник