如何在HTML和JS中开发Ubuntu应用程序?

我正在开发一个应用程序,我认为HTML和JavaScript对未来更好,但我找不到任何教程(我需要应用程序来使用系统主题)。

Unity,消息菜单和通知,couchdb等都有绑定吗?

可以在developer.ubuntu.com上找到Ubuntu上绑定和API的良好起点。 我对它没有任何经验,但你可能也想查看Gjs,GNOME的Javascript绑定。

根据您的尝试,您可以像任何HTML + JS应用程序一样构建应用程序,然后将其放入Webkit视图中。 在python中做起来非常简单:

#!/usr/bin/env python from gi.repository import Gtk, WebKit import os, sys class Browser: def __init__(self): self.window = Gtk.Window() self.window.set_default_size(800, 600) view = WebKit.WebView() view.load_html_string("Hello World!", "file:///") self.window.add(view) self.window.show_all() self.window.connect('destroy', lambda w: Gtk.main_quit()) def main(): app = Browser() Gtk.main() if __name__ == "__main__": main() 

通过在Gtk窗口中使用嵌入式WebKit框架,可以使用HTML + Javascript为界面开发(这在Python中最容易做到)。 最难的部分是从HTML / Javascript应用程序与系统进行通信。

您可以通过在Javascript和Python之间传递消息来实现此目的。 但是,您必须将系统逻辑编写为Python函数,但这很容易实现。

这是一个显示Python和Javascript之间通信的简单示例。 在示例中,HTML / Javascript显示一个按钮,单击该按钮时会向Python发送一个数组["hello", "world"] ,将数组连接到字符串“hello world”并将其发送回Javascript。 Python代码将数组的表示forms打印到控制台,Javascript代码弹出一个显示字符串的警告框。

example.py

 import gtk import webkit import json import os JAVASCRIPT = """ var _callbacks = {}; function trigger (message, data) { if (typeof(_callbacks[message]) !== "undefined") { var i = 0; while (i < _callbacks[message].length) { _callbacks[message][i](data); i += 1; } } } function send (message, data) { document.title = ":"; document.title = message + ":" + JSON.stringify(data); } function listen (message, callback) { if (typeof(_callbacks[message]) === "undefined") { _callbacks[message] = [callback]; } else { _callbacks[message].push(callback); } } """ class HTMLFrame(gtk.ScrolledWindow): def __init__(self): super(HTMLFrame, self).__init__() self._callbacks = {} self.show() self.webview = webkit.WebView() self.webview.show() self.add(self.webview) self.webview.connect('title-changed', self.on_title_changed) def open_url(self, url): self.webview.open(url); self.webview.execute_script(JAVASCRIPT) def open_path(self, path): self.open_url("file://" + os.path.abspath(path)) def send(self, message, data): self.webview.execute_script( "trigger(%s, %s);" % ( json.dumps(message), json.dumps(data) ) ) def listen(self, message, callback): if self._callbacks.has_key(message): self._callbacks[message].append(callback) else: self._callbacks[message] = [callback] def trigger(self, message, data, *a): if self._callbacks.has_key(message): for callback in self._callbacks[message]: callback(data) def on_title_changed(self, w, f, title): t = title.split(":") message = t[0] if not message == "": data = json.loads(":".join(t[1:])) self.trigger(message, data) def output(data): print(repr(data)) if __name__ == "__main__": window = gtk.Window() window.resize(800, 600) window.set_title("Python Gtk + WebKit App") frame = HTMLFrame() frame.open_path("page.html") def reply(data): frame.send("alert", " ".join(data)) frame.listen("button-clicked", output) frame.listen("button-clicked", reply) window.add(frame) window.show_all() window.connect("destroy", gtk.main_quit) gtk.main() 

page.html中

       

你真正需要注意的唯一python代码是def output(data):的代码def output(data):到文件的末尾应该很容易理解。

要运行它,请确保安装了python-webkitpython-gtk2 ,然后将文件保存在同一文件夹中并运行:

 python example.py 

计划在行动

我开发了BAT ,这是一个用HTML,JS和CSS构建桌面应用程序的小工具。


我在博客上写了一篇关于它的文章 。

  • 安装
  • BAT JavaScript API
  • 例子

index.html

        

Hello World

Ipsum deserunt architecto necessitatibus quasi rerum dolorum obcaecati aut, doloremque laudantium nisi vel sint officia nobis. Nobis ad nemo voluptatum molestiae ad. Nisi ipsum deserunt a illo labore similique ad?

Ipsum veniam laborum libero animi quo dignissimos. Possimus quidem consequatur temporibus consequatur odio, quidem deleniti! Similique totam placeat sint assumenda nulla dolor. Voluptatibus quasi veritatis distinctio consectetur nobis. Nemo reprehenderit?

Ipsum molestiae nesciunt commodi sint et assumenda recusandae! Earum necessitatibus sequi nulla fugit architecto omnis. Maiores omnis repellat cupiditate iure corporis dolorem sed amet nesciunt. Mollitia sapiente sit repellendus ratione.

Consectetur architecto ratione voluptate provident quis. At maiores aliquam corporis sit nisi. Consectetur ab rem unde a corporis reiciendis ut dolorum, tempora, aut, minus. Sit adipisci recusandae doloremque quia vel!

并且,我们以这种方式运行它:

 bat -d index.html -t "BAT Hello World" -s 800x500 

结果是:

至于直接访问平台,您应该查看种子 。

您还可以查看UserWebKit ,这是一个Python3库,它提供了Novacut和Dmedia UI使用的关键function(它是在UserCouch和Microfiber ,BTW上构建的 )。

经过深思熟虑后,我认为直接从JavaScript访问平台更有意思,因为如果需要,您可以选择在标准浏览器中运行UI。 Novacut架构使用CouchDB来保持UI和后端服务器网络透明。 在通常的单机情况下,服务器在该计算机上本地运行。 但是,您也可以在其他系统上运行服务器(和CouchDB),而UI不会注意到差异。

那么你可以包含一个可以运行像php这样的shell命令的语言,这样可以利用从网页安装应用程序和执行一些命令等function(比如检测使用哪个主题以及根据系统主题使用什么CSS)。 例如,您有两个可能有用的问题:

服务器可以同时处理shell命令吗? (讨论执行多个命令)

从Web运行行命令(单击网页链接) (其中涉及单击链接并从软件中心安装应用程序)

为了了解使用什么主题的方法,您可以解析ubuntu文件,它具有默认主题的值,并根据它修改网站的CSS以反映新主题。

有关主题的问题以及在何处可以找到它:

我需要编辑哪个文件来更改主题中的文本颜色?

桌面会忘记主题吗?

编辑GTK主题(添加边框)

所有这些(以及更多,如果您使用搜索)可以帮助您了解解析时的位置以及您可以检查哪些文件以查看系统正在使用的主题以及在网页中使用的内容。

是的,您可以使用纯粹的html / css / js编写应用程序,使用GObject内省可以为JS提供yes绑定。 看看GnomeSeed https://live.gnome.org/Seed

SeedKit: https ://live.gnome.org/SeedKit

教程: https : //live.gnome.org/Seed/Tutorial

现在我们有AppJS – https://github.com/milani/appjs

正如他们所说,“ 它使用Chromium作为核心(以便支持最新的HTML5 API)和Node.js作为主干。