Czy można otworzyć aplikację Ubuntu z HTML?

16

Obecnie tworzę stronę internetową i zastanawiam się, czy można wprowadzić polecenie w języku HTML, które otworzy zainstalowaną aplikację Ubuntu, taką jak Chromium, okno terminalu lub Nautilus.

Czy coś takiego jest możliwe? Dzięki!

I Heart Ubuntu
źródło
Tak było w Windowsie, ale tylko jeśli uruchomiłeś IExplorer, ale z uwagi na fakt, że strona internetowa jest tylko tekstem z odrobiną magii po stronie serwera, ogranicza to możliwości przeglądarki. Jestem pewien, że ktoś coś wymyśli. Aplikacja Java może być?
SimplySimon,
1
Być może powinieneś wyjaśnić, w jakim środowisku pracujesz, ponieważ jest on obecnie bardzo szeroki. Na przykład - możesz uruchomić stronę HTML w webkit-webview, która może być połączona z aplikacją opartą na Pythonie itp.
fossfreedom
Hmmm ... Przyjąłem czysty HTML @fossfreedom>: - D
Rinzwind
Tak, to tylko podstawowa strona HTML. Żadnych baz danych ani nic.
I Heart Ubuntu
Jeśli to pomoże, strona będzie dla użytkowników Linuksa. Każdy może go używać naturalnie, ale projektuję to ściśle dla użytkowników Linuksa / Ubuntu. Wydaje się dość proste. Uruchom aplikację Ubuntu, taką jak terminal lub kalkulator, z linku na stronie internetowej. Na przykład, jeśli zrobię „apt: // chromium-browser”, otworzy się strona Chromium Centrów Oprogramowania Ubuntu. Wiemy, że możemy uruchomić przynajmniej USC z HTML. Co z aplikacjami Ubuntu / Linux?
I Heart Ubuntu

Odpowiedzi:

21

Tak, możesz dodając nowy moduł obsługi protokołu w systemie Ubuntu. Poniższa metoda pokaże, jak zarejestrować proces otwierania aplikacji jako app://[application_name]procedury obsługi protokołu w Ubuntu.

1. Utwórz skrypt uruchamiania aplikacji

  • W biegu terminalowym:

    mkdir -p bin
    

    To polecenie utworzy binkatalog w homefolderze, jeśli jeszcze go nie masz.

  • Po uruchomieniu:

    gedit ~/bin/open_app.sh
    

    Spowoduje to utworzenie nowego pliku open_app.shw gedit.

  • Skopiuj i wklej następujący skrypt w nowo utworzonym pliku:

    #!/bin/bash
    
    if [[ "$1" != "app://" ]]; then 
        app=${1#app://}
        nohup "$app" &>/dev/null &
    else 
        nohup gnome-terminal &>/dev/null &
    fi
  • Zapisz plik i zamknij go.

  • Wróć do terminala i uruchom:

    chmod +x ~/bin/open_app.sh
    

    aby udzielić dostępu do skryptu.

2. Utwórz plik .desktop dla programu uruchamiającego aplikacje

Teraz musisz utworzyć program uruchamiający .desktop dla powyższego skryptu i powiedzieć Ubuntu, aby używał tego programu uruchamiającego jako app://procedury obsługi protokołu. Utwórz /usr/share/applications/appurl.desktopplik za pomocą następującego polecenia:

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

i dodaj następującą treść:

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

Zapisz plik i zamknij go.

3. Odśwież bazę danych typów MIME

W powyższym pliku moduł obsługi schematu MimeType=x-scheme-handler/app;rejestru linii app://, ale aby działał, należy zaktualizować pamięć podręczną bazy danych typów MIME, wykonując polecenie:

sudo update-desktop-database 

4. Test z terminala

Teraz wszystko powinno działać. Aby sprawdzić, czy działa z terminala, uruchom na przykład następującą komendę:

xdg-open 'app://gedit'

4. Testuj w przeglądarce za pomocą HTML

Możesz przetestować w przeglądarce, używając na przykład następującej strony internetowej 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>

Wynik:

app: //

Radu Rădeanu
źródło
2
Bardzo bardzo dobrze. 1 drobny problem: użytkownicy korzystający z witryny nie będą mieli takich skrawków, wyrzutni i typów MIME. Musisz więc również dostarczyć je w jakiś sposób ze strony internetowej. Za pomocą navigator.registerProtocolHandler powinna być możliwa instalacja bez instalowania oprogramowania. Ale wygląda to bardzo, bardzo ładnie :-D
Rinzwind
@Rinzwind Cóż, skrypt, który automatyzuje kroki 1, 2 i 3, może zostać udostępniony użytkownikom korzystającym z witryny przed użyciem app://programu do obsługi schematów. exec()Na przykład za pomocą funkcji z PHP skrypt można uruchomić w przeglądarce.
Radu Rădeanu,
exec () będzie działać po stronie serwera, a nie po stronie klienta. Jeśli spróbujesz po stronie klienta, przekonasz się, że zabezpieczenia przeglądarek zapobiegną uruchomieniu skryptów
NGRhodes
1
Chłodny! Pamiętaj, aby zmienić raduna swoje imię w appurl.desktop. Podobnie jak:Exec=/home/{YOUR NAME HERE}/bin/open_app.sh %u
@ RaduRădeanu Czy można uruchomić skrypt zamiast aplikacji? Na przykład, app://shell-exec myscript.shgdzie shell-exec jest po prostu kolejnym skryptem ( #!/bin/sh "$@" exec "$SHELL")
Khurshid Alam
5

Tak, nazywa się to „programami obsługującymi protokół internetowy”. Potrzebujesz przeglądarki Chrome 13 lub Firefox 3.0 lub nowszej. Widziałem, jak kiedyś otwierał LibreOffice.

Zarówno Mozilla, jak i updates.html5rocks mają wyjaśnienie, jak to działa. (Otwórz w Chrome / Chromium chrome://settings/handlersi wyświetli listę bieżących programów obsługi. Firefox wyświetli je about:config.)

Części z pierwszego linku:

Rejestracyjny

Konfigurowanie aplikacji internetowej jako procedury obsługi protokołu nie jest trudnym procesem. Zasadniczo aplikacja internetowa używa registerProtocolHandler (), aby zarejestrować się w przeglądarce jako potencjalny moduł obsługi dla danego protokołu. Na przykład:

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

Gdzie parametry to:

  • Protokół.
  • Szablon adresu URL używany jako moduł obsługi. „% S” zostaje zastąpione hrefem linku, a wynikowy adres URL jest wykonywany.
  • Przyjazna dla użytkownika nazwa modułu obsługi protokołu.

Gdy przeglądarka wykonuje ten kod, powinna wyświetlić użytkownikowi monit z prośbą o pozwolenie, aby zezwolić aplikacji internetowej na zarejestrowanie się jako moduł obsługi protokołu. Firefox wyświetla monit w obszarze paska powiadomień.

Przykład

<!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>
Rinzwind
źródło
Ładny. Czy istnieje sposób na przekazanie parametrów do lokalnej aplikacji?
AlikElzin-kilaka
1
Wydaje się, że pozwala to aplikacjom takim jak webmailer, ale nie ma zewnętrznych (lokalnych) aplikacji.
geek-merlin,
Przeczytaj szczegóły tutaj i tutaj . Również przy pierwszym łączu zobaczysz, że schemejest on ograniczony tylko do kilku. Zaakceptowane rozwiązanie zapewni lepszą rozdzielczość (oczywiście z pewnymi poprawkami w razie potrzeby).
Fr0zenFyr
Dla ciekawskich zapoznaj się ze specyfikacjami konsorcjum W3
Fr0zenFyr