HTMLからUbuntuアプリを開くことはできますか?


16

私は今、Webページを作成していますが、Chromiumなどのインストール済みUbuntuアプリ、ターミナルウィンドウ、Nautilusを開くコマンドをHTMLで入力できるかどうか疑問に思っています。

このようなことは可能ですか?ありがとう!


Windowsでは、IExplorerを実行した場合にのみそうでしたが、Webページはテキストであり、サーバーサイドの魔法を少しだけ使用しているため、ブラウザでできることは制限されています。誰かが何かを思いつくと思います。Javaアプリかもしれませんか?
SimplySimon

1
現時点では非常に広範であるため、実行している環境を明確にする必要があります。たとえば、webkit-webview内でpythonベースのアプリなどに接続できるHTMLページを実行できます。
fossfreedom

うーん...純粋なHTML @fossfreedomを想定>:-D
Rinzwind

はい、これは単なる基本的なHTML Webページです。データベースなどはありません。
IハートUbuntuの

助けがあれば、このサイトはLinuxユーザー向けになります。誰でも自然に使用できますが、私はこれをLinux / Ubuntuユーザー向けに厳密に設計しています。簡単そうに思えます。Webページ上のリンクから、ターミナルや電卓などのUbuntuアプリを起動します。たとえば、「apt:// chromium-browser」を実行すると、Ubuntu Software Centers Chromiumページが開きます。したがって、少なくともUSCをHTMLから起動できることがわかっています。Ubuntu / Linuxアプリはどうですか?
IハートUbuntu

回答:


21

はい、Ubuntuに新しいプロトコルハンドラーを追加することで可能です。次の方法はapp://[application_name]、Ubuntuでプロトコルハンドラーとしてアプリケーションを開くプロセスを登録する方法を示します。

1.アプリケーションランチャースクリプトを作成する

  • ターミナルでの実行:

    mkdir -p bin
    

    このコマンドはbinhomeフォルダーがまだない場合、フォルダーにディレクトリを作成します。

  • 実行後:

    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ファイルを作成します

ここで、上記のスクリプト用の.desktopランチャーを作成し、このランチャーをapp://プロトコルハンドラーとして使用するようUbuntuに指示する必要があります。/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 Webページを使用して、ブラウザーからテストできます。

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

結果:

app://


2
とってもとっても素敵。1つのわずかな問題:Webサイトを使用するユーザーには、これらのスクリプト、ランチャー、およびMIMEタイプがありません。そのため、Webサイトから何らかの方法でそれらを提供する必要もあります。navigator.registerProtocolHandlerを使用すると、ソフトウェアのインストールなしで実行できるはずです。しかし、とても素敵に見えます
-D

@Rinzwindさて、手順1、2、3を自動化するスクリプトは、app://スキームハンドラーを使用する前にWebサイトを使用するユーザーに提供できます。exec()たとえば、PHPの関数を使用すると、そのスクリプトをブラウザーで実行できます。
ラドゥラデアヌ

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

はい、「Webベースのプロトコルハンドラー」と呼ばれます。Chrome 13またはFirefox 3.0以降が必要です。LibreOfficeを開くために使用されるのを見てきました。

Mozillaupdates.html5rocksの両方に、これがどのように機能するかについての説明があります。(Chrome / Chromiumで開くとchrome://settings/handlers、現在のハンドラーのリストが表示されます。Firefoxはそれらをリストしますabout:config。)

最初のリンクのパーツ:

登録する

Webアプリケーションをプロトコルハンドラーとして設定するのは難しいプロセスではありません。基本的に、WebアプリケーションはregisterProtocolHandler()を使用して、特定のプロトコルの潜在的なハンドラーとしてブラウザーに登録します。例えば:

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

パラメータは次のとおりです。

  • プロトコル。
  • ハンドラーとして使用されるURLテンプレート。「%s」はリンクのhrefに置き換えられ、結果のURLでGETが実行されます。
  • プロトコルハンドラのわかりやすい名前。

ブラウザがこのコードを実行すると、Webアプリケーションがプロトコルのハンドラーとして登録することを許可する許可を求めるプロンプトがユーザーに表示されます。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
これにより、Webメーラーのようなアプリは許可されますが、外部(ローカル)アプリケーションは許可されないようです。
オタクマーリン

詳細はこちらこちらをご覧ください。また、最初のリンクで、がscheme少数に制限されていることもわかります。承認されたソリューションは、より良い解像度を提供します(もちろん、必要に応じていくつかの調整を行います)。
Fr0zenFyr

好奇心については、を参照してください W3コンソーシアムの仕様
-Fr0zenFyr
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.