Как использовать 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 обратный вызов вызывается сразу, а не когда окно закрыто. Любые идеи?
Сэм Селикофф

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);

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")

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.