打包一个HTML5应用程序并将其部署在桌面上
Pack an HTML5 app and deploy it on the desktop
我读了很多文章和堆叠式的问题,但我似乎没有做到。
我想为客户分发一些产品信息,这些信息将以CD或U盘的形式发送出去。以前我用Flash做的。因为flash可以编译成一个名为flash投影仪的EXE,并且可以在不安装的情况下运行我的flash内容。
现在我想给HTML5一个旋转。我需要一种方法把所有东西都打包在CD上,让它在不安装的情况下到处运行。
我听说我可以编译chrome并将其嵌入到c++应用程序中。(http://code.google.com/p/chromiumembedded/)我可以将QT与QtWebkit一起使用。(http://developer.qt.nokia.com/doc/qt-4.8/qtwebkit.html)我可以编译Webkit并将其嵌入到c++应用程序中。。。(http://www.webkit.org/)
这些例子太大了,我没有任何C++技能=(
还有像mozilla chromeless这样的项目(http://mozillalabs.com/chromeless)(和伯克利(https://github.com/sirikata/berkelium)
使用chromless,我的JQuery Javascript无法工作,Berkelium。。。我没有编译。。。
我没有预算http://www.appcelerator.com/或其他付费/商业选择。。。(Flash/Air和Silverlight也不是一个选项)。因为内容也应该在不使用插件的情况下部署在web服务器上。。。
我不需要访问操作系统。我想要的是我的Jquery/Backbone应用程序,它使用JSON文件在桌面客户端中运行,而无需安装。
所以没有浏览器地址栏,只需获取index.html,其他一切都由应用程序处理。。。像全屏和关闭这样的东西会很好。。。
不幸的是,我不能依赖"客户操作系统"的安装浏览器,因为目标群体太大了,我希望有很多旧浏览器。
有人能告诉我如何"轻松"编译一个应用程序吗?这个应用程序可以让我的网络应用程序在没有安全警告的情况下从CD在桌面上运行吗?
或者有没有我可以使用的预编译包?
Node-webkit将Chromium(Chrome)浏览器与Node.js结合在一起。据我所知,你不需要额外的API,但你不需要使用它们,只需创建一个非常短的json文件并压缩你的项目就足够了,你甚至可以将所有内容组合成一个可执行文件。该项目提供二进制文件,因此不需要编译。
https://github.com/rogerwang/node-webkit
我也尝试了Awesomium(它是c++和40mb+)PyWebKit(确实有效,但我的svg鼠标移动监听器没有),因此最终使用了cefpython和pyinstaller。
以下是我刚刚做的一个"一键式窗口web应用程序可执行文件".exe.
- 下载了cefpython,它附带了一个编译的dll,里面有chromium(20mb)
- 运行"python-cefssimple.py"查看它是否工作(应该工作)
- 现在下载pyinstaller
- 解压缩到某个文件夹
- 将cefpython的所有文件复制到新创建的pyinstaller文件夹中
- 从pyinstaller/utils MakeSpec.py和Build.py向下复制一个文件夹
- 运行"MakeSpec.py-cefsimple.py"为生成的
- 如果您尝试运行"Build.py-cefsimple.spec",则If会将文件复制到名为dist的文件夹中
- 如果运行exe,它将不起作用,因为缺少一些dll和一个图标
- 让我们通过更改规范文件来添加dll(我稍后将其放在文本中)
- 如果你再次构建它,它会将图标和其他所有内容复制到文件夹中,这样exe就会运行(你会在一个真正的嵌入式chromium框架中看到cefsimple.html)
- 现在,您可以使用嵌入或pyhton代码来修复http链接,您将获得一个很好的"一键式windows web应用程序可执行文件":-)(请参阅pyinstaller文档中的--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'))
如果它应该在任何windows2000+上运行,那么就不需要python,不需要系统库,也不需要额外的dll或图标。
如果你在Windows7 64位上构建它,它将无法在32位系统上工作
如果你在WindowsXP 32位上构建它,它可以在任何地方工作。甚至在葡萄酒中。但不知怎么的,我无法从标题栏的exe中获取图标。必须从外部加载(代码在cefwindow.py中)。
趁它还新鲜的时候问我细节!
编辑:
要激活本地json请求:#BrowserSettings,请参阅:http://code.google.com/p/cefpython/wiki/BrowserSettingsbrowserSettings=dict()browserSettings["universal_access_from_file_users_allowed"]=真browserSettings["file_access_from_file_users_allowed"]=True
要获得一个好的概述,请查看Clint Berry的这篇评论文章。他介绍了TideSDK、AppJS、Node webkit、Sencha Desktop和Brackets Shell,并列出了每种解决方案的优缺点。
编辑:在阅读了评论之后,我为自己的项目选择了Node webkit,它非常有效!它不需要你根据任何特定的模式来构建应用程序。我只是照原样使用了我的标准AngularJS web应用程序,添加了所需的清单文件,并为Windows和OSX构建了它。
正如评论中提到的那样,您可以使用xulrunner据此:https://developer.mozilla.org/en/Getting_started_with_XULRunner您只需下载xulrunner,将其解压缩到一个文件夹中,对其进行配置,并使其在autorun.inf或类似的文件中启动即可。不需要编译(我想你需要在windows上展示它,但其他平台也不应该是问题)。
我为HTML5游戏开发人员制作了一个应用程序,如果你想在windows上运行你的HTML5游戏或应用程序(如本地应用程序),无需托管或手动运行本地服务器即可访问HTML5功能。
WinApps Jx Builder是一个应用程序,允许您将HTML5、java脚本和CSS打包为一个可执行应用程序,用于在windows操作系统上运行Native Like的窗口。从现在起,您只需双击即可在桌面上运行HTML5网站、应用程序和游戏,其余由WinApps JX负责。
但你需要在你的机器上安装谷歌铬框架:
谷歌铬框
-WinApps Jx-
您可以使用IWebBrowser2在C(WinAPI)程序中嵌入浏览器控件。
http://github.com/dns/WinAPI-Embed-Browser/releases
我在github上创建了一个项目,将几个html应用程序包制作成单个EXE文件。
要从EXE/DLL资源访问html文件,请使用:res://programname.exe/test.html
作为路径。
您还可以隐藏窗口边框&只是显示HTML应用程序的内容,甚至在全屏上运行。如果您想制作交互式CD,这非常有用。
- 试图在visual studio上用C++创建一个桌面应用程序
- 使用调试/崩溃报告将应用程序部署到客户端
- 使用 mod_gsoap 部署服务时,如何在 Gsoap 中更改 soap 上下文的模式?
- 如何在桌面C++上使用 WinApi 画线
- 桌面中的Qt QMessageBox中心'critical'
- Qt QML桌面应用程序自动化测试
- Qt QML相机在部署后显示白屏
- WinDeployqt 不会为调试应用程序部署 Qwindowsd.dll
- Windows 10 上的 Linphone 桌面
- 如何使用opencv和Qt拍摄部分桌面的照片
- 在 Linux 上部署 Qt 应用程序
- 如何使用所有依赖项部署C++项目?
- 更改用于部署的凭据提供程序 GUID 的过程
- Windows桌面程序保存您的计算机会话 - 基于程序崩溃时的恢复会话
- 由于____chkstk_darwin,在Catalina上使用部署10.10编译的MacOS应用程序在HighSierra版本<崩溃
- Qt5 部署"procedure entry point could not be located"
- 用 Python 训练神经网络并在 C++ 中部署
- 部署在张量流中训练的神经网络来火炬C++的最佳方法是什么?
- 如何停止在所有桌面上显示C / C++ WINAPI窗口?
- 下一个云桌面客户端构建过程