Web 可以做什么?
时至今日,这个问题已经不能简单回答了。html5,css3 技术的出现已经使 web 的能力得到了很大的提高,但,web 仍有局限!由于安全性的考虑,浏览器对 web 进行了种种限制,例如:
- Web 不能读写文件
- Web 不能实现很多牵涉到系统底层的功能
- Web 的 UI 被局限成页面的形式
可是,这似乎跟我的标题相矛盾了。不,你没有看错!今日,由于 chrome 的开源,我们可以改造 webkit 内核让 web 无所不能!
用 Web 技术实现的一个透明浏览器
下面,我将以我用 Web 实现的一个透明浏览器为例子进行讲解。
注意,这个浏览器的 UI 是完全用 Web 实现的,而且是支持半透明的。有兴趣的朋友可向我索要 demo,我的 qq 是 446741501。这个透明浏览器只是网页透明渲染的一个应用,我们甚至可以实现一个桌面版的 WebQQ。
让 js 能够执行 c++
要实现这一点,基本原理是让 js 能够执行 c++的方法。Chrome 的 V8 引擎是支持在页面注入客户端的回调函数的。但是,这个回调函数是全局的。也就是说,在这个函数执行的时候,并不知道是哪个页面调用的。所以我这里采用了一个方法,就是在每个页面的顶部注入一段脚本:
var handle=windowhandle;
在这里把窗口的句柄传进去,待会再调用回调函数的时候再传回来,就可以知道是哪个窗口调用了。
实现了 c++与 js 的互相调用之后,我们就解决了根本的大问题了。只要 js 能够调用 c++,也就能调用所有系统的 api 了,也就自然能够实现所有客户端软件能实现的功能了。
让 Web 页面能够实现客户端软件的 UI
然而,这里还有一个问题需要解决。如何让 web 页面能够实现客户端软件的 UI?比如异形窗口,比如半透明效果。一个喜人的消息是,最新版的 webkit 内核已经支持透明模式渲染了。当然,要实现我们想要的在桌面渲染出一个透明的网页,还需要做一些功夫。不过,最终我还是摸索出来了,所以就做了上面那个透明浏览器。
基本原理,是自己接管 webkit 页面的绘制工作。这里,webkit 支持自绘,且会把像素点的数据通过参数传到我们的自定义绘制函数。通过这样,我们就可以把像素点绘制在一个透明 DC 了,然后再把响应的鼠标事件传给 webkit 去处理就行了。
结语
嗯,通过上面这个例子。你是否也相信 web 能够无所不能了?嘻嘻~~不只如此,如果用 web 页面实现客户端软件,还可以做到软件界面的随时更新。而且,用 web 开发软件比起用 c++来写,我想开发效率会高很多。
当然,也存在一些问题,比如性能问题,内存占用高,运行速度慢等等。但随着 webkit 内核的不断升级,我想这些问题都会得到解决的。我想,如果有一天,我们能用 web 技术来实现客户端软件,那该是多么美好的一天~
螃蟹 2014 年 11 月 25 日
其实.net 的 winform 也可以实现
@Life 2012 年 8 月 7 日
web 越来越强大了
koala 2012 年 6 月 5 日
原来还是个卡丁车高手~~源码啊啊啊啊~~
匿名 2012 年 6 月 4 日
何不放个安装文件给大家尝尝鲜?
匿名 2012 年 6 月 7 日
嗯,会有的,还不完善