เป็นไปได้ไหมที่จะเปิดแอพ Ubuntu จาก HTML?


16

ฉันกำลังสร้างเว็บเพจในตอนนี้และสงสัยว่าเป็นไปได้หรือไม่ที่จะป้อนคำสั่งใน HTML ที่จะเปิดแอป Ubuntu ที่ติดตั้งเช่น Chromium หรือหน้าต่างเทอร์มินัลหรือ Nautilus

เป็นไปได้อย่างนี้ไหม? ขอบคุณ!


ใน Windows มันเคยเป็น แต่ถ้าคุณรัน IExplorer แต่เนื่องจากข้อเท็จจริงที่ว่าหน้าเว็บเป็นข้อความที่มีเวทย์มนตร์ฝั่งเซิร์ฟเวอร์เพียงเล็กน้อยสิ่งนี้จะจำกัดความสามารถของเบราว์เซอร์ ฉันแน่ใจว่าบางคนจะเกิดอะไรขึ้น แอป Java อาจเป็นอย่างไร
SimplySimon

1
คุณอาจจะต้องอธิบายให้ชัดเจนในสภาพแวดล้อมที่คุณใช้อยู่เพราะมันกว้างมากในขณะนี้ ตัวอย่างเช่น - คุณอาจเรียกใช้หน้า html ภายใน webkit-webview ซึ่งสามารถเชื่อมต่อกับแอพที่ใช้ python และอื่น ๆ ได้
fossfreedom

อืม ... ฉันถือว่า HTML บริสุทธิ์ @fossfreedom>: - D
Rinzwind

ใช่นี่เป็นเพียงหน้า HTML พื้นฐาน ไม่มีฐานข้อมูลหรืออะไร
I Heart Ubuntu

หากความช่วยเหลือใด ๆ เว็บไซต์จะให้ผู้ใช้ linux ทุกคนสามารถใช้งานได้ตามธรรมชาติ แต่ฉันออกแบบสิ่งนี้อย่างเคร่งครัดสำหรับผู้ใช้ linux / Ubuntu ดูเหมือนง่ายพอ เปิดแอพ Ubuntu เช่นเทอร์มินัลหรือเครื่องคิดเลขจากลิงก์บนเว็บเพจ ตัวอย่างเช่นถ้าฉันทำ "apt: // chromium-browser" มันจะเปิดหน้าศูนย์ซอฟต์แวร์ Ubuntu ของ Chromium ดังนั้นเรารู้ว่าเราสามารถเปิด USC จาก HTML เป็นอย่างน้อย แล้วแอพ Ubuntu / linux ล่ะ?
I Heart Ubuntu

คำตอบ:


21

ใช่คุณสามารถทำได้โดยเพิ่มตัวจัดการโปรโตคอลใหม่ใน Ubuntu ของคุณ วิธีการต่อไปนี้จะแสดงวิธีการลงทะเบียนกระบวนการเปิดแอปพลิเคชั่นเป็นapp://[application_name]ตัวจัดการโปรโตคอลใน Ubuntu

1. สร้างสคริปต์ตัวเรียกใช้งานแอปพลิเคชัน

  • ในการใช้งานเทอร์มินัล:

    mkdir -p bin
    

    คำสั่งนี้จะสร้างbinไดเรกทอรีในhomeโฟลเดอร์ของคุณหากคุณยังไม่มี

  • หลังจากวิ่ง:

    gedit ~/bin/open_app.sh
    

    สิ่งนี้จะสร้างไฟล์ใหม่open_app.shใน gedit

  • คัดลอกและวางสคริปต์ต่อไปนี้ในไฟล์ที่สร้างใหม่:

    #!/bin/bash
    
    if [[ "$1" != "app://" ]]; then 
        app=${1#app://}
        nohup "$app" &>/dev/null &
    else 
        nohup gnome-terminal &>/dev/null &
    fi
  • บันทึกไฟล์และปิด

  • กลับไปที่เทอร์มินัลแล้วเรียกใช้:

    chmod +x ~/bin/open_app.sh
    

    เพื่อให้สิทธิ์การเข้าถึงเพื่อเรียกใช้งานสคริปต์

2. สร้างไฟล์ .desktop สำหรับตัวเรียกใช้งานแอปพลิเคชัน

ตอนนี้คุณต้องสร้างตัวเรียกใช้. เดสก์ท็อปสำหรับสคริปต์ด้านบนและบอก Ubuntu ให้ใช้ตัวเรียกใช้นี้เป็นapp://ตัวจัดการโปรโตคอล สร้าง/usr/share/applications/appurl.desktopไฟล์โดยใช้คำสั่งต่อไปนี้:

sudo -H gedit /usr/share/applications/appurl.desktop

และเพิ่มเนื้อหาต่อไปนี้:

[Desktop Entry]
Name=TerminalURL
Exec=/home/radu/bin/open_app.sh %u
Type=Application
NoDisplay=true
Categories=System;
MimeType=x-scheme-handler/app;

บันทึกไฟล์และปิด

3. รีเฟรชฐานข้อมูลประเภท mime

ในไฟล์ข้างต้นตัวจัดการแบบแผนของการMimeType=x-scheme-handler/app;ลงทะเบียนบรรทัดapp://แต่เพื่อให้ทำงานได้เราควรอัพเดตแคชฐานข้อมูลชนิด mime โดยรันคำสั่ง:

sudo update-desktop-database 

4. ทดสอบจากเทอร์มินัล

ตอนนี้ทุกอย่างควรทำงาน เพื่อทดสอบว่าใช้งานได้จากเทอร์มินัลให้รันคำสั่งนี้

xdg-open 'app://gedit'

4. ทดสอบจากเบราว์เซอร์โดยใช้ HTML

คุณสามารถทดสอบจากเบราว์เซอร์โดยใช้ตัวอย่างหน้าเว็บ HTML ต่อไปนี้:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
    <title>Open some applications</title>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
</head>

<body>
        <h3>Open some applications in Ubuntu from HTML</h3>
        <p>Open terminal: <a title="Open" href="app://">app://</a>
        (equivalent with: <a title="Open" href="app://gnome-terminal">app://gnome-terminal</a>)</p>
        <p>Open Nautilus: <a title="Open" href="app://nautilus">app://nautilus</a></p>
        <p>Open Chromium: <a title="Open" href="app://chromium-browser">app://chromium-browser</a></p>
        <p>Open Ubuntu Software Center: <a title="Open" href="app://software-center">app://software-center</a>
        (equivalent with: <a title="Open" href="apt://">apt://</a>)</p>
        <p>...and so on</p>
</body>

</html>

ผลลัพธ์:

แอปพลิเค: //


2
ดีมากมาก 1 ปัญหาเล็กน้อย: ผู้ใช้ที่ใช้งานเว็บไซต์จะไม่มีปัญหาเรื่องดีบุกปืนกลและประเภท mime ดังนั้นคุณต้องจัดหาพวกเขาในบางลักษณะจากเว็บไซต์ ด้วย navigator.registerProtocolHandler คุณควรทำการติดตั้งซอฟต์แวร์โดยไม่มี แต่มันดูดีมาก :-D
Rinzwind

@Rinzwind ดีสคริปต์ที่ทำให้ขั้นตอนที่ 1, 2 และ 3 โดยอัตโนมัติสามารถให้กับผู้ใช้ที่ใช้เว็บไซต์ก่อนที่จะใช้app://รูปแบบการจัดการ exec()ตัวอย่างเช่นการใช้ฟังก์ชั่นจาก PHP สคริปต์สามารถทำงานในเบราว์เซอร์ได้
Radu Rădeanu

exec () จะเรียกใช้ฝั่งเซิร์ฟเวอร์ไม่ใช่ฝั่งไคลเอ็นต์ หากคุณลองฝั่งไคลเอ็นต์คุณจะพบความปลอดภัยของเบราว์เซอร์จะป้องกันไม่ให้สคริปต์ทำงาน
NGRhodes

1
เย็น! อย่าลืมเปลี่ยนraduชื่อappurl.desktopเป็น เช่นเดียวกับ:Exec=/home/{YOUR NAME HERE}/bin/open_app.sh %u

@ RaduRădeanuเป็นไปได้ไหมที่จะเรียกใช้สคริปต์แทนแอพ ตัวอย่างเช่นapp://shell-exec myscript.shที่ shell-exec เป็นเพียงสคริปต์อื่น ( #!/bin/sh "$@" exec "$SHELL")
Khurshid Alam

5

ใช่เรียกว่า "เครื่องมือจัดการโปรโตคอลบนเว็บ" คุณต้องใช้ Chrome 13 หรือ Firefox 3.0 ขึ้นไป ฉันเคยเห็นว่ามันเคยเปิด LibreOffice

ทั้งMozillaและupdates.html5rocksมีคำอธิบายเกี่ยวกับวิธีการทำงานของมัน (เปิดใน Chrome / Chromium chrome://settings/handlersและจะแสดงรายการตัวจัดการปัจจุบัน Firefox จะแสดงรายการตัวจัดการเหล่าabout:configนั้น)

อะไหล่จากลิงค์ที่ 1:

การบันทึก

การตั้งค่าเว็บแอปพลิเคชันเป็นตัวจัดการโปรโตคอลไม่ใช่กระบวนการที่ยาก โดยทั่วไปเว็บแอปพลิเคชันใช้ registerProtocolHandler () เพื่อลงทะเบียนตัวเองกับเบราว์เซอร์เป็นตัวจัดการที่เป็นไปได้สำหรับโปรโตคอลที่กำหนด ตัวอย่างเช่น:

navigator.registerProtocolHandler("mailto",
                              "https://www.example.com/?uri=%s",
                              "Example Mail");

พารามิเตอร์อยู่ที่ไหน:

  • โปรโตคอล
  • เทมเพลต URL ที่ใช้เป็นตัวจัดการ "% s" จะถูกแทนที่ด้วย href ของลิงก์และ GET จะถูกดำเนินการบน URL ผลลัพธ์
  • ชื่อที่จำง่ายของผู้ใช้สำหรับตัวจัดการโปรโตคอล

เมื่อเบราว์เซอร์ประมวลผลรหัสนี้ควรแสดงพรอมต์ให้กับผู้ใช้เพื่อขออนุญาตอนุญาตให้เว็บแอปพลิเคชันลงทะเบียนเป็นตัวจัดการโปรโตคอล Firefox จะแสดงพรอมต์ในพื้นที่แถบการแจ้งเตือน

ตัวอย่าง

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
    <title>Web Protocol Handler Sample - Register</title>
    <script type="text/javascript">
navigator.registerProtocolHandler("fake", "http://starkravingfinkle.org/projects/wph/handler.php?value=%s", "Fake Protocol");
    </script>
</head>
<body>
    <h1>Web Protocol Handler Sample</h1>
    <p>This web page will install a web protocol handler for the <code>fake:</code> protocol.</p>
</body>
</html>

ดี มีวิธีส่ง params ไปยังแอปในเครื่องหรือไม่?
AlikElzin-kilaka

1
ดูเหมือนว่าจะอนุญาตแอปเช่นเว็บเมล แต่ไม่มีแอปพลิเคชันภายนอก (ในเครื่อง)
geek-merlin

อ่านรายละเอียดที่นี่และที่นี่ นอกจากนี้ในลิงค์แรกคุณจะเห็นว่าschemeมีการ จำกัด เพียงไม่กี่ โซลูชันที่ได้รับการยอมรับจะให้ความละเอียดที่ดีขึ้น (แน่นอนว่ามีการปรับแต่งตามความจำเป็น)
Fr0zenFyr

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