(HTML + JS)桌面客户端框架

问题描述 投票:0回答:5

我计划为 Windows 和 Mac 编写一个桌面客户端。它将由网络技术(HTML + JS)提供支持。因此它应该在用户桌面上的 WebKit 引擎上运行。

最近,我看到了解决这个问题的一个有趣的方法:Appcelerator 我喜欢它的基本概念,但我不想依赖他们的服务。相反,我想完全控制加载我的应用程序的 WebKit 程序。

是否有任何不错的开源 WebKit 框架用于构建桌面应用程序?桌面集成功能,例如 Growl 支持等,值得赞赏。

问候,

史蒂芬


更新:我不是在搜索 Adobe Air ;-)

javascript html webkit desktop-application
5个回答
11
投票

除了 Appcelerator 之外,我还知道两个桌面 GUI 框架有一个封装了 webkit 的浏览器组件:GTK+ 和 Qt。您可以使浏览器组件填充应用程序的窗口,并用 HTML+CSS 编写应用程序的大部分(或全部)。如果您喜欢 Python 语言或者它是非常重要的标准库,您可以使用 python 绑定 pyQt 或 pyGTK。

如果您愿意使用 Gecko 引擎,则比 Prism 更“强大”的替代方案是 XULRunner (https://developer.mozilla.org/En/XULRunner)。虽然 Prism 是一组轻量级的 Web 应用程序桌面绑定,但 XULRunner 允许您构建完整的应用程序,例如 Firefox 本身或 Thunderbird 等。虽然许多 XULRunner 应用程序是使用 XUL 编写的,但使用以下代码编写整个应用程序很容易HTML/CSS 位于单个 XUL WebBrowser 组件中 - 并且您的 javascript 仍然具有本机桌面应用程序的所有功能。

我使用 XULRunner 编写了几个桌面应用程序。几乎所有应用程序的代码都是 HTML/CSS/Javascript,但我已经包含了 Python 框架(通过 pyXPCOM 和 pyXPCOMext),并编写了一个薄层,向 Javascript 公开了一些 Python 功能。 XULRunner 附带的 Mozilla 组件免费为您提供了大量功能,但如果您发现自己需要更多功能或功能齐全的编程库,Python 就能满足您的需求。还有与 Java 的绑定。或者,如果您想使用 C 或 C++ 库,您可以从头开始构建 XULRunner。

更新:自 2009 年我最初写下上述内容以来,发生了一些变化。其中之一是,Prism 项目从 Mozilla Labs 中删除,并于 2011 年底完全停止(http://www.salsitasoft.com/2011) /09/08/终止-webrunner/)。一个值得关注的替代方案是https://github.com/rogerwang/node-webkit

2014 年 12 月更新: 最近的另一个选择是 GitHub 的 Atom Shell。它使用 Chromium 的“内容”模块,就像 node-webkit 和 Chromium 嵌入式框架一样(并将其作为独立库发布:https://github.com/brightray/libchromiumcontent)。与 Node-WebKit 的一个主要区别是,Atom 没有将 Node 的事件循环与 Chromium 的事件循环合并,而是在单独的进程中启动它们,并混合使用同步和异步进程间消息在它们之间进行通信。

如果您有兴趣在 C++ 或 .Net 应用程序中嵌入 Chromium,还有 Awesomium


3
投票

Appcelerator 平台是开源,因此您不依赖于公司 - 如果您愿意,您可以随时破解自己周围的代码。如果您想要更多控制权,您可以随时直接挂钩到 WebKit。 Joel 提到的 Gecko 相当于 AIR/Appcelerator 可能是 Mozilla Prism


3
投票

如果你不介意使用最初基于 WebKit 的 Chromium,那么我建议你看看Molybden

它是一个 SDK,允许您使用 C++ 后端和 HTML/CSS/JS 前端构建跨平台桌面应用程序。

在您的应用程序中,您可以通过 JavaScript 调用 C++,反之亦然,使用 自动类型转换

例如,以下是如何从 C++ 执行 JavaScript:

auto window = browser->mainFrame()->executeJavaScript("window").asJsObject();

// Invoke the window.alert("Hello, world!") function.
window->call("alert", "Hello, world!");

// Access the window.location.href property.
auto location = window->getProperty("location").asJsObject();
std::string href = location->getProperty("href").asString();

以下代码片段展示了如何从 JavaScript 调用 C++:

std::string greet(std::string name) {
  return "Hello " + name + "! This message comes from C++";
}

auto window = browser->mainFrame()->executeJavaScript("window").asJsObject();
window->putProperty("greet", &greet);

然后在 JavaScript 中你可以简单地调用

greet()
C++ 函数,如下所示:

var message = greet("John");

您的桌面应用程序可在 Windows、macOS(x64 和 Apple Silicon)和 Linux 上运行。


1
投票

如果你没有完全致力于 webkit,我记得有一个项目允许你使用 Firefox 引擎做类似的事情。基本上是一个围绕 gecko 渲染器的简约窗口,加上 Gears 和应用程序的桌面快捷方式。不过暂时找不到链接。


0
投票

你可以尝试使用Molybden,它似乎是最好的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.