วิธีใช้ nodejs เพื่อเปิดเบราว์เซอร์เริ่มต้นและไปที่ URL เฉพาะ


146

ฉันกำลังเขียนแอปพลิเคชันโดยใช้ Node.js

หนึ่งในฟังก์ชันที่ฉันต้องการสร้างคือเปิดเว็บเบราว์เซอร์เริ่มต้นและไปที่ URL ที่ต้องการ

ฉันต้องการให้พกพาได้เพื่อให้ทำงานบน Windows / Mac / Linux


3
ฉันเดาว่าคำถามนี้คือสิ่งที่คุณกำลังมองหา: stackoverflow.com/questions/7664605/…
TomTasche

ใช่มันใช้งานได้ใน Mac มันทำงานใน Windows และ Linux หรือไม่ ฉันไม่มีเครื่องทำหน้าต่างอยู่ในมือ
Qing Xu

1
xdg-open ทำงานใน Linux :)
Qing Xu

คำตอบ:


179

ใช้แบบเปิด (เดิมเรียกว่าopn) เนื่องจากจะจัดการปัญหาข้ามแพลตฟอร์ม ติดตั้ง:

$ npm install open

ใช้:

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 การโทรกลับจะถูกเรียกทันทีแทนที่จะเป็นเวลาที่ปิดหน้าต่าง ความคิดใด ๆ ?
Sam Selikoff

2
ไม่แน่ใจอาจคุ้มค่าที่จะลองใช้github.com/domenic/openerเป็นโมดูลทางเลือกที่มี API เดียวกัน ดูเหมือนว่ามีตัวติดตามปัญหาที่เหมาะสมซึ่งคุณสามารถเปิดปัญหาได้ อาจเป็นเรื่องแปลกที่เบราว์เซอร์รายงานว่ากระบวนการสิ้นสุดลงแล้วดังนั้นจึงอาจแก้ไขได้ไม่ยาก
ForbesLindesay

1
นี่เป็นคำแนะนำที่ยอดเยี่ยมใช้ได้ดีกับกรณีการใช้งานที่ OP อธิบายไว้
jbranchaud

2
ดูเหมือนว่า opener จะทำงานบน Mac / Windows / Linux ในขณะที่ open จะใช้งานได้บน Mac / Windows เท่านั้นดังนั้น opener จึงดีกว่า
ทอม

สิ่งนี้ใช้ได้กับฉัน แต่ดูเหมือนว่ากระบวนการลูกไม่ได้ถูกแยกออกดังนั้นเมื่อเซิร์ฟเวอร์หยุดทำงาน Firefox ของฉันก็เช่นกัน! ไม่แน่ใจว่าจะ "เปิด" เพื่อแยกกระบวนการย่อยได้อย่างไร ... มีความคิดอย่างไร
sidewinderguy

51
var url = 'http://localhost';
var start = (process.platform == 'darwin'? 'open': process.platform == 'win32'? 'start': 'xdg-open');
require('child_process').exec(start + ' ' + url);

2
ควรสังเกตบน windows อย่างน้อย&ใน URL ควรเป็น Escape ด้วย^&
junvar

1
ฉันห่อตรรกะที่คล้ายกันสัญญาและเผยแพร่ไปยัง npm npmjs.com/package/out-url
azhar22k


4

คุณอาจต้องใช้สวิตช์โดยใช้ค่าของ ...

require('os').type()

แล้วใช้spawn("open")หรือspawn("xdg-open")ขึ้นอยู่กับแพลตฟอร์ม?


4
ใน windows ฉันลอง spawn ("explorer.exe", [' stackoverflow.com'] ) windows explorer จะเลือกเบราว์เซอร์เริ่มต้นเพื่อเปิด URL
Qing Xu

@PaulIrish: น่าเศร้าตอนนี้ลิงค์ของคุณตายแล้ว
mklement0

2
@QingXu สุดยอด! require('child_process').spawn('explorer', ['url'])เป็น oneliner ที่ดี!
TWiStErRob

2

วิธีที่ง่ายที่สุดและ neatest, 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")

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.