195

首先,我对专业地做这件事不感兴趣。我是一名网络开发人员,我的一个同事最近离开了 Spotify,他说他将主要使用 JavaScript 为 Spotify 桌面应用程序工作。他说它使用“Chrome 框架”,里面的一切都像网络应用程序(HTML/JS/CSS)一样完成。

作为一个从未为桌面构建过任何东西的 Web 开发人员,这是个好消息。如果我可以使用我已经知道的技术并在某种“框架”中实现它们,并且仍然能够构建 Windows 或更好的跨平台应用程序。

我知道我没有提到任何关于数据库的内容,但即使是一个简单的带有 Web 技术的 hello world 桌面应用程序也可以很好地开始。

那么怎么做呢?我到底需要/需要知道什么?

4

9 回答 9

76

您可以从 Titanium for desktop dev 开始。你也可以看看Chromium Embedded Framework。它基本上是一个基于 chromium 的网络浏览器控件。

它是用 C++ 编写的,因此您可以在容器应用程序中执行所有您想要的低级操作系统内容(咆哮、托盘图标、本地文件访问、com 端口等),然后在 html/javascript 中执行所有应用程序逻辑和 gui。它允许您拦截任何 http 请求以提供本地资源或执行一些自定义操作。例如,对http://localapp.com/SetTrayIconState?state=active的请求可能会被容器拦截,然后调用 C++ 函数来更新托盘图标。

它还允许您创建可以直接从 JavaScript 调用的函数。

直接在 CEF 中调试 JavaScript 非常困难。不支持像 Firebug 这样的东西。

你也可以试试AppJS.com(帮助构建桌面应用程序。适用于 Linux、Windows 和 Mac,使用 HTML、CSS 和 JavaScript)

此外,正如@Clint 所指出的,brackets.io (Adobe) 的团队使用 Chromium Embedded Framework 创建了一个很棒的 shell,这使得上手变得更加容易。它被称为括号外壳:github.com/adobe/brackets-shell在此处了解更多信息:clintberry.com/2013/html5-desktop-apps-with-brackets-shell

于 2012-09-02T08:48:51.287 回答
34

NW.js

(以前称为 node-webkit)

如果您熟悉 Node 或有 JavaScript 经验,我建议您使用NW.js。

NW.js 是一个基于 Chromium 和 node.js 的应用运行时。

特征

  • 用现代 HTML5、CSS3、JS 和 WebGL 编写的应用程序
  • 完全支持 Node.js API 及其所有第三方模块。
  • 性能好:Node和WebKit在同一个线程中运行:函数调用简单;对象在同一个堆中,并且可以相互引用
  • 易于打包和分发应用程序
  • 适用于 Linux、Mac OS X 和 Windows

您可以在此处找到 NW.js 存储库,并在此处找到对 NW.js良好介绍。如果你喜欢学习Node.js,我会推荐这篇带有很多好的链接的 SO 帖子。

于 2014-07-15T13:17:59.700 回答
27

Awesomium让您在 C++ 或 .NET 应用程序中轻松使用 HTML UI

更新

我以前的答案现在已经过时了。这些天你不考虑使用Electron会很疯狂。许多流行的桌面应用程序都是在它之上开发的。

于 2014-07-01T13:49:18.243 回答
16

注意:AppJS已被弃用,不再推荐。

请查看NW.js。

于 2012-09-02T01:43:07.090 回答
9

似乎 HTML/JS/CSS 桌面应用程序的解决方案并不短缺。

我刚刚遇到的一种解决方案是 TideSDK:http ://www.tidesdk.org/ ,看看文档,这似乎很有希望。

您可以使用 Python、PHP 或 Ruby 进行开发,并将其打包用于 Mac、Windows 或 Linux。

于 2013-11-29T06:24:44.793 回答
3

很抱歉打破你的泡沫,但Spotify 桌面客户端只是一个基于 Webkit 的浏览器。当然它暴露了特定的附加功能,但它只能运行 JS 和渲染 HTML/CSS,因为它有一个 JS 引擎和一个 Chromium 渲染引擎。这不能帮助您编写客户端 Web 应用程序并部署到多个平台。

您正在寻找的是类似于Sencha Touch - 一个允许 HTML5 应用程序本地部署到 iOS、Android 和 Blackberry 设备的框架。它基本上充当某些 API 调用和可用的设备特定功能之间的中介。

我没有使用appcelerator的经验,它似乎就是这样做的——并且在网上获得了非常好的评价。您应该试一试(除非您想回​​到 1999 年并使用MS HTA;)

于 2012-09-02T07:45:30.400 回答
1

我知道有FluidPrism(还有其他的,这是我以前使用的),可以让您将网站加载到看起来像独立应用程序的地方。

在 Chrome 中,您可以为网站创建桌面快捷方式。(您在 Chrome 中执行此操作,您不能/不应将其与您的应用程序打包)Chrome Frame 不同:

Google Chrome Frame 是基于开源 Chromium 项目为 Internet Explorer 设计的插件;它将 Google Chrome 的开放网络技术引入 Internet Explorer。

你需要为你的 webapp 提供某种类似的包装器,然后剩下的就是你习惯的 web 技术。您可以在应用离线时使用 HTML5本地存储来存储数据。我认为您甚至可以使用 SQLite。

不过,我不知道您将如何访问操作系统的特定功能。我上面描述的内容与任何“常规”网站具有相同的限制。希望这能给你一些关于从哪里开始的指导。

于 2012-09-02T01:42:17.017 回答
1

您可以使用 Adob​​e AIR 构建 Javascript 应用程序... http://www.adobe.com/products/air.html

于 2013-05-21T19:04:20.643 回答
0

CEF 为定制提供了很多灵活性和选项。但是如果目的是快速开发,node-webkit 也是一个不错的选择。Node-web 工具包还提供了直接从 DOM 调用节点模块的能力。

如果没有任何本地模块来集成 Node-Webkit 可以提供更好的里程。使用本机模块 C/C++ 甚至 C#,使用 CEF 会更好。

于 2013-11-24T14:49:57.683 回答