Có thể mở ứng dụng Ubuntu từ HTML không?


16

Tôi đang tạo một trang web ngay bây giờ và tự hỏi liệu có thể nhập một lệnh trong HTML sẽ mở một ứng dụng Ubuntu đã cài đặt như Chromium hoặc cửa sổ đầu cuối hoặc Nautilus.

Có phải bất cư thứ gì như thế này đều được? Cảm ơn!


Trong Windows, nhưng chỉ khi bạn chạy IExplorer, nhưng do thực tế là một trang web chỉ có một chút ma thuật phía máy chủ, điều này giới hạn khả năng của trình duyệt. Tôi chắc chắn ai đó sẽ nghĩ ra thứ gì đó. Ứng dụng Java có thể là?
SimplySimon

1
Có lẽ bạn nên làm rõ trong môi trường nào bạn đang chạy vì nó rất rộng tại thời điểm này. Ví dụ: bạn có thể đang chạy một trang html trong webkit-webview có thể được kết nối với một ứng dụng dựa trên python, v.v.
fossfreedom

Hmmm ... Tôi giả sử HTML thuần túy @fossfreedom>: - D
Rinzwind

Vâng, đây chỉ là một trang web HTML cơ bản. Không có cơ sở dữ liệu hoặc bất cứ điều gì.
Tôi yêu Ubuntu vào

Nếu có bất kỳ sự trợ giúp nào, trang web sẽ dành cho người dùng linux. Bất cứ ai cũng có thể sử dụng nó một cách tự nhiên, nhưng tôi đang thiết kế nó một cách nghiêm ngặt cho người dùng linux / Ubuntu. Có vẻ đủ đơn giản. Khởi chạy một ứng dụng Ubuntu như thiết bị đầu cuối hoặc máy tính từ một liên kết trên trang web. Ví dụ: nếu tôi thực hiện "apt: // chromium-browser" thì nó sẽ mở Trang Chromium của Trung tâm phần mềm Ubuntu. Vì vậy, chúng tôi biết rằng chúng tôi có thể khởi chạy ít nhất USC từ HTML. Còn ứng dụng Ubuntu / linux thì sao?
Tôi yêu Ubuntu vào

Câu trả lời:


21

Có, bạn có thể bằng cách thêm trình xử lý giao thức mới trong Ubuntu. Phương pháp sau đây sẽ chỉ cho bạn cách đăng ký quy trình mở ứng dụng làm app://[application_name]trình xử lý giao thức trong Ubuntu.

1. Tạo tập lệnh launcher ứng dụng

  • Trong một thiết bị đầu cuối chạy:

    mkdir -p bin
    

    Lệnh này sẽ tạo một binthư homemục trong thư mục của bạn nếu bạn chưa có nó.

  • Sau khi chạy:

    gedit ~/bin/open_app.sh
    

    Điều này sẽ tạo ra các tập tin mới open_app.shtrong gedit.

  • Sao chép và dán đoạn mã sau vào tệp đã tạo mới:

    #!/bin/bash
    
    if [[ "$1" != "app://" ]]; then 
        app=${1#app://}
        nohup "$app" &>/dev/null &
    else 
        nohup gnome-terminal &>/dev/null &
    fi
  • Lưu file và đóng nó lại.

  • Quay trở lại thiết bị đầu cuối và chạy:

    chmod +x ~/bin/open_app.sh
    

    để cấp quyền truy cập thực thi cho tập lệnh.

2. Tạo tệp .desktop cho trình khởi chạy ứng dụng

Bây giờ bạn phải tạo một trình khởi chạy .desktop cho tập lệnh trên và bảo Ubuntu sử dụng trình khởi chạy này làm app://trình xử lý giao thức. Tạo /usr/share/applications/appurl.desktoptập tin bằng lệnh sau:

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

và thêm nội dung sau:

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

Lưu file và đóng nó lại.

3. Làm mới cơ sở dữ liệu loại mime

Trong tệp trên, trình xử lý lược đồ MimeType=x-scheme-handler/app;đăng ký dòng app://, nhưng để làm cho nó hoạt động, chúng ta nên cập nhật bộ đệm cơ sở dữ liệu loại mime bằng cách thực hiện lệnh:

sudo update-desktop-database 

4. Kiểm tra từ thiết bị đầu cuối

Bây giờ mọi thứ nên làm việc. Để kiểm tra xem nó hoạt động từ terminal, hãy chạy ví dụ lệnh này:

xdg-open 'app://gedit'

4. Kiểm tra từ trình duyệt bằng HTML

Bạn có thể kiểm tra từ trình duyệt bằng cách sử dụng ví dụ trang web HTML sau:

<!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>

Kết quả:

ứng dụng: //


2
Rất rất tốt. 1 vấn đề nhỏ: người dùng sử dụng trang web sẽ không có các loại kịch bản, trình khởi chạy và loại mime. Vì vậy, bạn cũng cần cung cấp chúng theo cách nào đó từ trang web. Với navigator.registerProtocolHandler, có thể thực hiện cài đặt phần mềm. Nhưng nó trông rất rất đẹp :-D
Rinzwind

@Rinzwind Vâng, một kịch bản tự động hóa các bước 1, 2 và 3 có thể được cung cấp cho người dùng sử dụng trang web trước khi sử dụng app://trình xử lý lược đồ. exec()Ví dụ, sử dụng hàm từ PHP, đoạn script đó có thể được tạo để chạy trong trình duyệt.
Radu Rădeanu

exec () sẽ chạy phía máy chủ, không phải phía máy khách. Nếu bạn thử phía máy khách, bạn sẽ thấy bảo mật trình duyệt sẽ ngăn các tập lệnh chạy
NGRhodes

1
Mát mẻ! Hãy nhớ thay đổi radutên của bạn trong appurl.desktop. Giống như:Exec=/home/{YOUR NAME HERE}/bin/open_app.sh %u

@ RaduRădeanu Có thể khởi chạy một tập lệnh thay vì một ứng dụng không? Ví dụ: app://shell-exec myscript.shnơi shell-exec chỉ là một tập lệnh khác ( #!/bin/sh "$@" exec "$SHELL")
Khurshid Alam

5

Có, nó được gọi là "Trình xử lý giao thức dựa trên web". Bạn cần Chrome 13 hoặc Firefox 3.0 trở lên. Tôi đã thấy nó được sử dụng để mở LibreOffice.

Cả Mozillaupdate.html5rocks đều có lời giải thích về cách thức hoạt động của nó. (Mở trong Chrome / Chromium chrome://settings/handlersvà nó sẽ hiển thị danh sách các trình xử lý hiện tại. Firefox sẽ liệt kê chúng trong about:config.)

Các phần từ liên kết 1:

Đăng ký

Thiết lập một ứng dụng web như một trình xử lý giao thức không phải là một quá trình khó khăn. Về cơ bản, ứng dụng web sử dụng registerProtocolHandler () để tự đăng ký với trình duyệt như một trình xử lý tiềm năng cho một giao thức nhất định. Ví dụ:

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

Trong đó các tham số là:

  • Các giao thức.
  • Mẫu URL, được sử dụng làm trình xử lý. "% S" được thay thế bằng href của liên kết và GET được thực thi trên URL kết quả.
  • Tên thân thiện với người sử dụng cho trình xử lý giao thức.

Khi một trình duyệt thực thi mã này, nó sẽ hiển thị lời nhắc cho người dùng, xin phép cho phép ứng dụng web đăng ký làm trình xử lý cho giao thức. Firefox hiển thị lời nhắc trong khu vực thanh thông báo.

Thí dụ

<!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>

Đẹp. Có cách nào để vượt qua params cho ứng dụng cục bộ không?
AlikElzin-kilaka

1
Điều này dường như cho phép các ứng dụng như webmailer, nhưng không có ứng dụng bên ngoài (cục bộ).
geek-merlin

Đọc chi tiết ở đâyở đây . Ngoài ra, trên liên kết đầu tiên , bạn cũng sẽ thấy rằng schemechỉ giới hạn ở một số ít. Giải pháp được chấp nhận sẽ cung cấp độ phân giải tốt hơn (tất nhiên với một số điều chỉnh khi cần thiết).
Fr0zenFyr

Đối với những người tò mò, hãy tham khảo thông số kỹ thuật của tập đoàn W3
Fr0zenFyr
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.