文档章节

HT for Web嵌入QtWebKit的客户端解决方案

xhload3d
 xhload3d
发布于 2014/11/14 01:36
字数 897
阅读 2022
收藏 29

HTML5已经足够强大,但很多应用还是需要独立桌面客户端的解决方案,毕竟能操作本地文件等功能还是很多工具类软件短期内无法完全采用云方案替代。

hero

最近Adobe发布的http://brackets.io也是类似的应用,Brackets这样描述自己:An open source code editor for the web, written in JavaScript, HTML and CSS. 这样的描述在过去很难想象居然是编辑器的工具,如今采用WebKit嵌套各种壳的方案已让这类应用成为主流。

Adobe的Brackets采用的是自家的https://github.com/adobe/brackets-shell/套壳框架,不过brackets-shell仅为Brackets量身定做,并不建议一般应用使用:

Note: The brackets-shell is only maintained for use by the Brackets project. Although some people have definitely had success using it as an app shell for other projects, we don’t provide any official support for that and we haven’t done a ton of work to make the app shell easily reusable. Many people will likely find it easier to use a project like node-webkit, which is more generic by design.

一般应用采用https://github.com/rogerwang/node-webkitHT for Web自然也能通过node-webkit打包成客户端应用程序,如下图所示:

22

最近遇到用户通过Qt将HT for Web嵌入QtWebKit的解决方案,但遇到了显示正常但无法鼠标操作的奇怪问题,经过一番折腾才发现HT居然把QtWebKit在桌面的环境,错误的识别为可Touch的移动终端环境,如何正确判断Touch和Mouse的交互环境是非常狗血的事情,可参考http://stackoverflow.com/questions/4817029/whats-the-best-way-to-detect-a-touch-screen-device-using-javascript/4819886#4819886 加上如今window8的即可touch又可mouse让问题更加复杂化。

还好HT预留了可配置的方案,通过在引入ht.js包之前设置htconfig = {Default: {isTouchable:false}};强制HT采用常规的mouse事件进行处理。因为HT内部简单采用”ontouchend” in document的方案来判断,一般情况下桌面环境该值为undefined,移动终端为null,而QtWebKit居然在桌面环境下也为null,结果HT采用了Touch的监听事件从而导致了无法操作的现象,通过htconfig的设置后一切就正常了!

Screen Shot 2014-11-14 at 12.11.54 AM

HTML5通过WebKit嵌入打包成本地应用已经不是新鲜事了,整个世界的各种客户端技术正在变得更加融合,无数种千奇百怪的客户端方案正在改变很多观点和架构,不久前的wwdc2014中的JavaScript for Automation我觉得是被严重忽略的亮点,整个mac osx系统和应用程序都可通过JavaScrpit进行调用,早期window得利于众多应用软件而普及,苹果在站稳了移动终端后,借助诸如JavaScript for Automation的动作吸引更多专业客户端开发者,也许会不知不觉在桌面领域翻盘。

Screen Shot 2014-11-14 at 1.27.25 AM


© 著作权归作者所有

xhload3d
粉丝 187
博文 164
码字总数 341461
作品 0
崇明
私信 提问
QtWebKit 2.2 正式版 和 Qt Creator 2.3.1发布

Qt官方发布了QtWebKit 2.2正式版的桌面版本和移动版本。 QtWebkit基于开源的WebKit引擎,提供了一个在Qt中使用web浏览器引擎的功能,它包含一个C++ API,允许在Qt应用程序中嵌入网页内容,并...

小编辑
2011/10/02
2.9K
2
Qt 与 JavaScript 交互 (一)

Qt是如何与JavaScript交互的呢?Qt是通过Qtwebkit 与JavaScript 交互,然后Qtwebkit 又是Qt的什么模块呢? Qtwebkit是基于开源的WebKit engine。http://www.webkit.org是开源webkit官方网站。...

寒竺
2013/08/14
0
0
移植Qt4.8.4项目到QT5.2上时遇到的一些问题

问题1:Qt 5.2 使用原来的QT4.8.4项目时QWebView 、QWebFrame等类无法编译通过。 出现原因:QWebView 、QWebFrame、QWebPage、QWebInspector等这些类被单独移到了QtWebKitWidgets模块,不再在...

china008
2014/07/21
0
0
Qt 5发布

Digia,Qt新的所有者,宣布了Qt框架第五版的发布。“Qt 5关键改进方面:图像质量;有限硬件下的性能提升;跨平台可移植性;对C++ 11的支持;QtWebKit 2对HTML5的劫持;大幅改进、新增API的Q...

xyxzfj
2012/12/20
25
0
惠普继续开源JavaScriptCore和Enyo UI widget

近日,惠普继续按照之前公布的webOS开源路线图前进,Enyo2.0的部分UI组件开始公布,还有javascript核心代码,以及webOS上全新的的QtWebKit浏览器代码。 javascript core目前还不完整,我们之...

红薯
2012/02/17
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

Jenkins系列_插件安装及报错处理

进入Jenkins之后我们可以进行插件的安装,插件管理位于以下模块: 发现上面报了一堆错误,是因为插件的依赖没有安装好,那么这一节,就先把这些错误解决掉吧。解决完成后,也就基本会使用插件...

shzwork
今天
2
0
mysql mysql的所有查询语句和聚合函数(整理一下,忘记了可以随时看看)

查询所有字段 select * from 表名; 查询自定字段 select 字段名 from 表名; 查询指定数据 select * from 表名 where 条件; 带关键字IN的查询 select * from 表名 where 条件 [not] in(元素...

edison_kwok
昨天
9
0
多线程同时加载缓存实现

import com.google.common.cache.Cache;import com.google.common.cache.CacheBuilder;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorServi......

暗中观察
昨天
3
0
利用VisualVM 内存查看

准备工作,建几个测试类。等下就是要查看这几个类里面的属性 package visualvm;public class MultiObject { private String str; private int i; MultiObject(String str...

冷基
昨天
2
0
组装一台工作游戏两用机

一、配置清单如下: 分类 项目 价格(元) 主板 华硕(ASUS)TUF Z370-PLUS GAMING II 电竞特工 Z370二代 支持9代CPU 1049 CPU 英特尔(Intel) i7 8700K 酷睿六核 盒装CPU处理器 2640 风扇 九...

mbzhong
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部