是否可以从HTML打开Ubuntu应用程序?


16

我现在正在创建一个网页,想知道是否可以在HTML中输入命令来打开已安装的Ubuntu应用,例如Chromium,终端窗口或Nautilus。

这样的事情可能吗?谢谢!


在Windows中,但仅当您运行IExplorer时才如此,但是由于网页仅是带有服务器端魔术的文本,因此这限制了浏览器的功能。我敢肯定有人会提出一些建议。Java应用程序可能是?
SimplySimon

1
您可能应该澄清您在什么环境中运行,因为当前环境非常广泛。例如-你可以运行它可以连接到基于应用程序等等等等蟒WebKit的网页视图中的HTML页面
fossfreedom

嗯...我以为纯HTML @fossfreedom>:-D
Rinzwind 2013年

是的,这只是一个基本的HTML网页。没有数据库或任何东西。
I Heart Ubuntu

如果有帮助,该站点将面向Linux用户。任何人都可以自然使用它,但是我正在为Linux / Ubuntu用户严格设计它。似乎很简单。从网页上的链接启动Ubuntu应用,例如终端机或计算器。例如,如果我执行“ apt:// chromium-browser”,它将打开Ubuntu软件中心的Chromium页面。因此,我们知道我们至少可以从HTML启动USC。那么Ubuntu / linux应用程序呢?
I Heart Ubuntu

Answers:


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文件

现在,您必须为上述脚本创建一个.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好吧,可以在使用app://方案处理程序之前使用网站向用户提供自动执行步骤1、2和3的脚本。exec()例如,使用PHP中的函数,可以使该脚本在浏览器中运行。
RaduRădeanu13年

exec()将运行服务器端,而不是客户端。如果尝试使用客户端,则会发现浏览器的安全性将阻止脚本运行
NGRhodes 2013年

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模板,用作处理程序。链接的href替换了“%s”,并对结果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>

真好 有没有办法将参数传递给本地应用程序?
AlikElzin-kilaka

1
这似乎允许像webmailer这样的应用程序,但不允许外部(本地)应用程序。
geek-merlin

这里这里阅读详细信息。另外,在第一个链接上,您还将看到scheme仅限于几个。公认的解决方案将提供更好的分辨率(当然需要进行一些调整)。
Fr0zenFyr

出于好奇,请参阅W3联盟规范
Fr0zenFyr
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.