使用 HTML5 GUI 进行跨平台桌面开发

Cross platform desktop development with HTML5 GUI

短篇小说:有没有办法用 HTML5 中的 GUI 和 python(甚至 C#/Mono)等跨平台语言编写核心的桌面应用程序?

长话短说:我是一名 C# 开发人员,对于我很少做的小型个人项目,运行 在 Windows 和 OSX 下,我使用 C# (Mono) 和前端利用 Eto.Forms

我想知道是否有一种成熟的方法可以使用 HTML5 GUI 实现相同的结果,因为我想了解它并相信它在不久的将来可能是一个不错的选择Windows 桌面用户界面(或者我的技能集中的一个不错的工具)。当然,如果幕后的代码 运行 是 C# 我会非常高兴,但我也会涉足另一个领域,也许像 python 这样更跨平台的会更好。

现阶段我对任何面向移动的解决方案都不感兴趣。

我用http://kivy.org/写了一个APP,它可以为不同的系统创建应用程序。

Qt node https://github.com/arturadib/node-qt 好像也很有意思,不过我自己没测试过。

最后 https://chrome.google.com/webstore/launcher

您可以为 chrome 创建 Web 应用程序,在受支持的系统中应该 运行。

Kivy 是一个 Python 解决方案。 Qt 节点也许就是您要找的。

这里有一些很好的 kivy 教程: https://www.youtube.com/playlist?list=PLQVvvaa0QuDe_l6XiJ40yGTEqIKugAdTy

NW.js

但它是 Javascript(节点),不是 python 也不是 C#。

NW.js 看起来很有前途...您甚至可以使用 TypeScript,它比普通的 ol'js 更接近 C#。如果您愿意使用 PHP,您可以查看 nightrain 项目 https://github.com/naetech/nightrain

试试 http://www.tidesdk.org/

您的应用将 运行 在 Windows 8、MacOS 和 Linux 上运行。您可以使用 HTML5、Javascript 和 CSS3.

但是您也可以使用您熟悉的脚本语言来扩展应用程序的功能。 TideSDK目前支持Python、PHP、Ruby.

我认为一个非常有趣的项目是Chromium Embedded Framework. You basically embed a (stripped down) web browser in your application. For python, many GUI Toolkits are supported. Check this以获取更多信息。

既然您习惯了 C#,也许 Java 和 JavaFX and FXML is an option. FXML is not HTML but you can style it with CSS as well. You can also use Scene Builder with it for faster UI creation. Many JVM languages support this toolkit so Jython 而不是 Java 也可以。不过,我会推荐 Java,因为对其他语言的支持虽然还不完善。

使用 C# 和 Windows App Store WebView 也是一种选择。您可以查看 MSDN 了解更多信息。

我相信还有其他选择(Kivy、Node.js 等)。其中一些已在本主题中提到。

我会推荐基于 nodejs.You 的 Node-Webkit 仍然可以使用一些 python 脚本来做一些与 Node-Webkit 集成的后端工作,这很容易处理 with.I已经看到一些成功的应用程序使用它(如 wunderlist)。TideSDK 是另一种选择,但 TideSDK 中的 python 支持不成熟 enough.The Node-Webkit 项目托管于 https://github.com/nwjs/nw.js/

Electron(以前的 Atom shell)最近真的很成熟。事实上,它就是 VSCode 的基础。

有一个关于使用 Angular 2 和 Typescript 的 great tutorial and starter code,您甚至可以使用 VSCode 来编写和构建它。

对我来说,这是从 WPF 世界过渡到 HTML5 的最佳方式。

我最近使用 Chromium Embedded Framework,基本上是 WPF 和 WinForms 的浏览器组件。它工作得很好,提供了一种从网站到 .NET 应用程序的双向互操作性,反之亦然。基本上,你:

  1. 创建 WPF 桌面应用程序
  2. 包括 CEFSharp 并在 window
  3. 上放置一个全屏浏览器
  4. 调用JavaScript中的方法:
// .NET
var mainFrame = browser.GetMainFrame();
mainFrame.ExecuteJavaScriptAsync("any js code");
  1. 绑定 .NET 对象
// .NET
browser.RegisterJsObject("boundObject", this);
  1. 从 website/JS:
  2. 中调用绑定的 .NET 对象的方法
// JS 
boundObject.someMethod();

在此基础上,您可以在 HTML/JS-UI 和 .NET 逻辑之间构建中介层(ViewModel、控制器等)...