打包HTML5应用程序并将其部署在桌面上

时间:2012-02-29 18:31:47

标签: c++ html5 web-applications deployment

我已经阅读了大量文章和stackoverflow问题,但我似乎无法让它发挥作用。

我想为客户分发一些产品信息,这些信息将通过CD或USB记忆棒发送出去。回到我用Flash做的那些日子。因为flash可以编译成一个名为Flash放映机的EXE,可以在不安装的情况下运行我的Flash内容。

现在我想给HTML5一个旋转。而且我需要一种方法来将所有内容打包在CD上,使其无需安装即可在任何地方运行。

我听说过我可以编译chrome并将其嵌入到c ++应用程序中。 (http://code.google.com/p/chromiumembedded/) 我可以在QtWebkit上使用QT。 (http://developer.qt.nokia.com/doc/qt-4.8/qtwebkit.html) 我可以编译Webkit并将其嵌入到c ++应用程序中......(http://www.webkit.org/)

示例很大,我没有任何C ++技能=(

然后有像mozilla chromeless这样的项目(http://mozillalabs.com/chromeless)(和berkelium(https://github.com/sirikata/berkelium)

使用chromeless,我的JQuery Javascript无法运行,Berkelium ......我没有编译......

我没有http://www.appcelerator.com/或其他付费/商业选项的预算......(也不支持Flash / Air和Silverlight)。因为内容也应该在不使用插件的情况下部署在Web服务器上......

我不需要访问操作系统。我想要的是我的Jquery / Backbone应用程序,它使用JSON文件在没有安装的桌面客户端中运行。

因此,没有浏览器地址栏只能获取index.html,其他所有内容都由应用处理... 像Fullscreen和Close这样的东西会很好......

不幸的是,我不能依赖“客户操作系统”的已安装浏览器,因为目标组很大,我期待很多旧浏览器。

任何人都可以给我指导如何“轻松”编译一个应用程序,使我的网络应用程序的东西从CD上运行而没有安全警告等等吗?

或者我可以使用任何预编译的包装吗?

6 个答案:

答案 0 :(得分:8)

Node-webkit将Chromium(Chrome)浏览器与Node.js结合在一起。据我所知,你不需要额外的API,但你不需要使用它们,只需创建一个非常简短的json文件并且压缩你的项目就足够了,你甚至可以将所有内容组合成一个可执行文件。该项目提供二进制文件,因此无需编译。

https://github.com/rogerwang/node-webkit

答案 1 :(得分:5)

我也尝试过Awesomium(它是c ++和40mb +)PyWebKit(确实有效但我的svg mousemove-listeners没有)因此最终使用了cefpython和pyinstaller。

这就是我刚才所做的“一键式windows-web-app-executable”.exe。

  • 已下载cefpython,它附带一个内部带有铬的编译dll(20mb)
  • 运行“python cefsimple.py”以查看它是否正常工作(应该)
  • 现在下载pyinstaller
  • 解压缩到某个文件夹
  • 将cefpython的所有文件复制到新创建的pyinstaller-folder
  • 从pyinstaller / utils MakeSpec.py和Build.py复制一个文件夹
  • 运行“MakeSpec.py cefsimple.py”为内置
  • 创建cefsimple.spec文件
  • 如果您尝试运行“Build.py cefsimple.spec”,如果将文件复制到名为dist的文件夹
  • 如果你运行exe它将无法正常工作,因为缺少一些dll和一个图标
  • 让我们通过更改spec文件来添加dll(我稍后会在文本中添加)
  • 你是否再次构建它,它会将图标和其他所有内容复制到文件夹中以便exe运行(你会在真正的嵌入式铬框架中看到cefsimple.html)
  • 现在你可以使用嵌入或pyhton代码来修复你的http链接,你会得到一个很好的“一键式windows-web-app-executable”:-)(见 - pyinstaller docs中的onefile选项)

cefsimple.spec:

# -*- mode: python -*-
a = Analysis(['cefsimple.py'],
             pathex=['c:\\pyinstaller-2.0'],
             hiddenimports=[],
             hookspath=None)
pyz = PYZ(a.pure)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
           [('icudt.dll', 'icudt.dll', 'BINARY')],
               [('avcodec-54.dll', 'avcodec-54.dll', 'BINARY')],
               [('libEGL.dll', 'libEGL.dll', 'BINARY')],
               [('avformat-54.dll', 'avformat-54.dll', 'BINARY')],
               [('avutil-51.dll', 'avutil-51.dll', 'BINARY')],
               [('d3dcompiler_43.dll', 'd3dcompiler_43.dll', 'BINARY')],
               [('d3dx9_43.dll', 'd3dx9_43.dll', 'BINARY')],
               [('libGLESv2.dll', 'libGLESv2.dll', 'BINARY')],
               [('locales\\en-US.pak', 'locales\\en-US.pak', 'DATA')],
               [('icon.ico', 'icon.ico',  'BINARY')],
          a.zipfiles,
          a.datas,
          name=os.path.join('dist', 'cefsimple.exe'),
          debug=False,
          strip=None,
          upx=True,
          console=False, icon='icon.ico' )
app = BUNDLE(exe,
             name=os.path.join('dist', 'cefsimple.exe.app'))

如果它应该在任何Windows 2000+上运行,没有python,没有系统库,也不需要额外的dll或图标。

如果在Windows7 64位上构建它,它将无法在32位系统上运行

如果你在WindowsXP 32bit上构建它,它可以在任何地方使用。甚至在葡萄酒中。但不知何故,我无法从标题栏的exe中获取图标。不得不从外部加载它(cefwindow.py中的代码)。

在我还没有新鲜的时候向我询问详细信息!

编辑:

激活本地json请求:     #BrowserSettings,请参阅:http://code.google.com/p/cefpython/wiki/BrowserSettings     browserSettings = dict()     browserSettings [“universal_access_from_file_urls_allowed”] =真     browserSettings [“file_access_from_file_urls_allowed”] = True

答案 2 :(得分:4)

有关概述,请查看Clint Berry的review article。他介绍了TideSDK,AppJS,Node-webkit,Sencha Desktop和Brackets Shell,并列出了每种解决方案的优缺点。

编辑:阅读完评论后,我为自己的项目选择了Node-webkit,效果很好!它不需要您根据任何特定范例构建应用程序。我刚刚采用了我的标准AngularJS Web应用程序,添加了所需的清单文件,并为Windows和OSX构建了它。

答案 3 :(得分:2)

正如有人在评论中提到的那样,你可以使用xulrunner 根据这个:https://developer.mozilla.org/en/Getting_started_with_XULRunner 你只需下载xulrunner,将其解压缩到一个文件夹中,配置它并使其在autorun.inf或类似的东西中启动。不需要编译(我认为你需要在windows上呈现它,但其他平台也不应该是一个问题)。

答案 4 :(得分:1)

我为HTML5游戏开发者制作了一个应用程序,如果你想在Windows上运行你的html5游戏或应用程序,就像本机应用程序一样,不需要托管或手动运行本地服务器来访问html5功能。

WinApps Jx Builder是一个应用程序,允许您将HTML5,java脚本,CSS打包到一个可执行文件应用程序中,用于在Windows操作系统上运行Native-Like的Windows。 从现在开始,只需双击即可在桌面上运行HTML5网站,应用程序和游戏,WinApps JX将负责其余的工作。

但您需要在自己的计算机上安装Google Chrome框架:

google chrome frame

- WinApps Jx -

答案 5 :(得分:1)

您可以使用 IWebBrowser2 在您的C( WinAPI )程序中嵌入浏览器控件。

http://github.com/dns/WinAPI-Embed-Browser/releases

我在github上创建了一个项目,将几个html app pack打包成单个EXE 文件。

要从EXE / DLL资源访问html文件,请使用:res://programname.exe/test.html作为路径。

您还可以隐藏窗口边框和只显示HTML应用的内容,甚至全屏运行。如果您想制作 交互式CD ,这非常有用。