【问题标题】:How to develop Desktop Apps using HTML/CSS/JavaScript? [closed]如何使用 HTML/CSS/JavaScript 开发桌面应用程序? [关闭]
【发布时间】:2012-08-27 07:13:26
【问题描述】:

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

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

我知道我没有提到任何关于数据库的内容,但即使是一个简单的带有网络技术的 hello world 桌面应用程序也很适合。

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

【问题讨论】:

  • 应该注意的是,至少有两个非排他性的 web-app-iness 层。一种是客户端、单页应用程序风格的应用程序,另一种是使用数据库或其他东西维护状态的应用程序。 (当然,最好的应用程序两者兼而有之。)您可以学习如何做一个,而无需了解另一个。
  • 这里的另一个相关主题 [Can you do Desktop Development using JavaScript?][1] [1]: stackoverflow.com/questions/109399/… Regards, Ben
  • 你做错了。 Web 不是为桌面应用程序设计的。 Period.If you want you can use QML/QtQuick,这是一个很好的权衡(但它仍然是桌面,而不是网络!)

标签: javascript html css desktop-application


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • CEF 内置了 chrome 开发工具,因此您可以使用它来调试 js。 AppJS 还可以使用 nodejs API 对操作系统进行低级别访问。
  • Bracket.io (Adobe) 的团队使用 Chromium Embedded Framework 创建了一个很棒的 shell,它使上手变得更加容易。它被称为括号壳:github.com/adobe/brackets-shell 在此处了解更多信息:clintberry.com/2013/html5-desktop-apps-with-brackets-shell
  • 我目前正在使用 CEF 和 Eclipse 作为开发工具,通过将 --remote-debugging-port=8080 传递给程序 args 的运行配置,可以将 CEF 链接到 Chrome 开发工具,然后在 Chrome 中访问 localhost:8080。所以请删除这部分 - 直接在 CEF 中调试 JavaScript 非常困难。不支持像 Firebug 这样的东西。 -
  • 另外,我开始开发 Kontena コンテナ github.com/jhg/kontena,用于开发基于 Adob​​e 的 CEF、PhoneGap、Backet.io 的 Win32、Linux、类 Unix、Mac 和 SmartPhone 的解决方案, AppJS 等。它非常不稳定,现在只是一个原型,用于获得 MVP,用 Python 编写用于测试概念,但将使用 QT5(现在使用 QT4)将代码转换为 C++/C 以及何时使用 C++/C开始翻译以获得移动支持。
  • @JHG 干得好.. 让我们知道它什么时候正式发布和修复错误
【解决方案2】:

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 存储库 here,以及 NW.js 的良好介绍 here。如果你喜欢学习Node.js,我会推荐this SO 帖子,里面有很多好的链接。

【讨论】:

  • 第二。很棒的工具。
  • 但是如果不要求他们安装node和node-webkit,这不能在人们之间分发,对吧?
  • @JānisGruzis 不,您已经发布了您的应用程序with NW.js binaries
【解决方案3】:

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

更新

我以前的答案现在已经过时了。这些天来,如果您不考虑为此使用Electron,那您会发疯的。许多流行的桌面应用都是在它之上开发的。

【讨论】:

    【解决方案4】:

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

    改为查看NW.js

    【讨论】:

    • 这似乎已被 appjs 创建者弃用
    • @DanEsparza 谢谢,我改进了答案
    【解决方案5】:

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

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

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

    【讨论】:

    • 看起来很有希望,但看起来已经不再开发了。核心团队现在正在开发一个名为 TideKit 的东西,但他们需要很长时间才能发布它——而且它会花钱:(
    • 是的,可惜。不过,在我回答的时候,它看起来确实很有希望。我想这就是他们对有关东西推荐的问题皱眉的原因之一。
    【解决方案6】:

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

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

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

    【讨论】:

    • 使用webkit进行应用,但主软件不是基于html/js
    【解决方案7】:

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

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

    Google Chrome Frame 是为基于 Internet Explorer 设计的插件 关于开源 Chromium 项目;它带来了谷歌浏览器的开放 网络技术到 Internet Explorer。

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

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

    【讨论】:

      【解决方案8】:

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

      【讨论】:

        【解决方案9】:

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

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

        【讨论】:

          猜你喜欢
          • 2017-08-08
          • 2011-12-19
          • 2016-06-11
          • 1970-01-01
          • 2011-01-27
          • 2011-06-03
          • 1970-01-01
          • 2011-10-19
          • 1970-01-01
          相关资源
          最近更新 更多