搜索
查看: 678|回复: 11

[web] 发一个CEF3(Chromium内核)网页控件

[复制链接]

151

主题

2378

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13073
发表于 2018-3-31 17:07:14 | 显示全部楼层 |阅读模式
扩展库源码、以及范例工程下载地址
https://pan.baidu.com/s/1vmyi0mMIw0W_lZXnCyVUSg


这是一个使用WebKitX(CEF3)实现的浏览器控件

优点:
1、支持不同版本CEF3,可以自己替换
2、体积大,功能多,可能使用CEF3丰富的功能,HTML5跑分520,非常高
3、CEF3虽然是编程很麻烦的多进程模式,但是这个扩展库已经虚拟了DOM节点对象,
可以类似单进程那样访问网页元素,调用其函数方法,很方便。

缺点:
1、体积大、很大很大
2、因为是商业收费版,试用版打开一个网页弹出一堆未注册对话框,这个我已经用API钩子取消掉了。
这个纯粹是练练API钩子自己玩一下,自己电脑上大家试用一下没关系,但是发布软件产品请购买正版控件。
3、不支持XP,至少要求win7 sp1以上操作系统,而且要安装VC2015运行库
4、exe不能置于包含中文路径的目录下,建议制作安装程序安装到英文目录下。

这个库部署麻烦了一些,
但是这个库的源码使用了一些有意思的小技巧,大家可以当范例玩玩
import win.ui;
/*DSG{{*/
var winform = win.form(text="cef3";right=1315;bottom=795)
winform.add()
/*}}*/

import web.cefx;
var cef3 = web.cefx(winform)

/*
调用 winform.show() 或 cef3.create()创建浏览器控件触发此事件,
这时候可以设置参数,但浏览器在这时候还没有初始化。
*/

cef3.onCreate =
function(cefSettings,commandLineSwitches){
   
   
//设置语言
    cefSettings.locale = "zh-CN"
   
   
//可选修改user_agent
    cefSettings.user_agent = "Mozilla/5.0 (aardio) Chrome/64.0.3282.0"

   
//设置应用程序缓存路径
    cefSettings.cache_path = io.fullpath("\MyCache")
   
   
//设置应用程序缓存路径
    cefSettings.application_cache = io.fullpath("\MyAppCache")
   
   
//启用cookie
    cefSettings.persist_session_cookies = 1
   
   
//存储用户设置
    cefSettings.persist_user_preferences = 1  
   
   
//开启WebGL
    cefSettings.webgl = 1
}

/*
已初始化安成,已创建CEF进程,进程间IPC通信已准备就绪,
在这个事件可以设置控件属性,或者打开网址。
*/

cef3.onBrowserReady =
function(){
   
   
//允许下载脚本(编辑模式下默认是禁止下载的)
    cef3.downloadScripts = true;
   
   
//在这个事件里可以打开网页
    cef3.go("http://www.so.com/")
}

/*
网址完全下载完成触发这个事件,
在这里可以切换编辑、浏览模式,也可以注册元素事件
*/

cef3.onLoadEnd =
function(){

    cef3.Preview();
//切换到浏览模式
   
   
//设置允许 cef3.onEvent 回调函数接收的事件
    cef3.Events = 0x1000/*_DOM_EVENT_SELECTSTART*/
                    | 0x100000
/*_DOM_EVENT_DOMSUBTREEMODIFIED*/
                    | 0x4000
/*_DOM_EVENT_DOMFOCUSIN*/
                    | 1
/*_DOM_EVENT_CLICK*/
                    | 0x400000
/*_DOM_EVENT_EDITABLE_ELEMENT_CHANGED*/
                    ;
}

/*
请在设置好其他参数、回调事件以后,
再调用cef3.create()函数,或者调用 winform.show()函数以实际的创建浏览器控件。
*/

winform.show();

//等待页面打开并准备就绪
cef3.wait()

/*
调用js的querySelector函数搜索节点,
并且改变节点的value属性(控件的值)
*/

cef3.querySelector(
"#input").value = "aardio cef3";
//下可以用等待节点出现的函数 cef3.waitQuerySelector("#input").value = "aardio cef3";

/*
调用js的querySelector函数搜索节点,
并且调用click函数模拟点击按钮。
*/

cef3.getEle(
"search-button").click();

//下面这样写也可以
//cef3.querySelector("#search-button").dispatchEvent("click");
win.loopMessage();
这个扩展库刚刚改进了一下,支持极简用法了:
import win.ui;
/*DSG{{*/
var winform = win.form(text="cef3 极简用法";right=1315;bottom=795)
/*}}*/

import web.cefx;
var cef3 = web.cefx(winform)
winform.show();

//这是最简单的用法
cef3.go("http://www.so.com/")
cef3.waitQuerySelector(
"#input").value = "aardio cef3";
cef3.getEle(
"search-button").click();

win.loopMessage();


回复

使用道具 举报

28

主题

148

帖子

844

积分

荣誉会员

吃白菜的鸟

Rank: 8Rank: 8

积分
844
发表于 2018-3-31 18:09:19 | 显示全部楼层
谢谢, 学习下,校长辛苦了
!
回复

使用道具 举报

8

主题

39

帖子

224

积分

二级会员

Rank: 3Rank: 3

积分
224
发表于 2018-3-31 18:25:22 | 显示全部楼层
下载下来看看      新玩具
回复

使用道具 举报

5

主题

127

帖子

1372

积分

四级会员

Rank: 6Rank: 6

积分
1372
发表于 2018-3-31 19:40:01 | 显示全部楼层
            辛苦了,  校长,  总是不断出新作!
回复

使用道具 举报

12

主题

679

帖子

3959

积分

荣誉会员

子非魚、安知魚之樂

Rank: 8Rank: 8

积分
3959
发表于 2018-3-31 20:22:56 | 显示全部楼层
辛苦了,下载学习一下!
回复

使用道具 举报

36

主题

74

帖子

431

积分

二级会员

Rank: 3Rank: 3

积分
431
发表于 2018-3-31 21:31:16 | 显示全部楼层
价值是相对的,对校长没价值的东西,对AAR用户可能极具价值.就像各种瓶瓶罐罐各种废旧,一般人都是当垃圾扔的,但是对于某些人来说,虽然是垃圾,但能卖钱的都是宝.
回复

使用道具 举报

36

主题

74

帖子

431

积分

二级会员

Rank: 3Rank: 3

积分
431
发表于 2018-4-2 22:15:42 | 显示全部楼层
上面的源码 import web.cefx; 一运行就提示导入库失败,找不到库文件.
为什么不把 web.cefx; 放到IDE的扩展库列表里自动导入呢,这个blink是很常用的内核,做网页模拟很适用.
回复

使用道具 举报

12

主题

679

帖子

3959

积分

荣誉会员

子非魚、安知魚之樂

Rank: 8Rank: 8

积分
3959
发表于 2018-4-2 22:21:24 | 显示全部楼层
lacker 发表于 2018-4-2 22:15
上面的源码 import web.cefx; 一运行就提示导入库失败,找不到库文件.
为什么不把 web.cefx; 放到IDE的扩展 ...

上面说的很清楚了这个控件是商业收费版,所以是不会放到库里面的
回复

使用道具 举报

11

主题

37

帖子

304

积分

二级会员

Rank: 3Rank: 3

积分
304
发表于 2018-4-3 16:09:21 | 显示全部楼层
可能是习惯问题,没有提供external 接口,我是不敢轻易使用的,因为不知道有不有坑。
回复

使用道具 举报

6

主题

18

帖子

121

积分

荣誉会员

Rank: 8Rank: 8

积分
121
发表于 2018-4-4 15:20:09 | 显示全部楼层
太牛了,这个最期待了,HTML5速度快
回复

使用道具 举报

36

主题

74

帖子

431

积分

二级会员

Rank: 3Rank: 3

积分
431
发表于 2018-4-5 10:23:19 | 显示全部楼层
本帖最后由 lacker 于 2018-4-5 10:35 编辑

把它放到 E:\WebKitXdemo ,然后把IDE工程中的中文名也改掉了,发布后 E:\WebKitXdemo\Publish\00.exe
错误提示与这一行有关 winform.createEmbed("{DFF43867-EAC5-4170-96B0-265A91723BCA}",this);   
是不是要另外执行cmd注册这个插件?
---------------------------
00.exe
---------------------------

{File}:lib\web\cefx\_.aardio
{Line}:#8
{Error}:
{Calling}:'?'
{Bad argument}:@1
'

com.CreateEmbed

error:Create Embed object failed! '
---------------------------
确定   
---------------------------

后续:明白了,原来还要把lib文件夹复制到发布后的exe一起.如果能解决中文路径和中文文件名的问题就完美了.
回复

使用道具 举报

151

主题

2378

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13073
 楼主| 发表于 2018-4-5 15:21:28 | 显示全部楼层
lacker 发表于 2018-4-5 10:23
把它放到 E:\WebKitXdemo ,然后把IDE工程中的中文名也改掉了,发布后 E:\WebKitXdemo\Publish\00.exe
错误 ...
是的,
用CEF3,你必须带上164MB的运行库,上百个DLL文件,
你想独立一个EXE就能运行,那是不可能的。

这是不开源的商业组件,
每次打开一个网页,会弹出三个以上的对话框提醒你交钱。
如果你想解决中文路径和中文文件名的问题,可以购买商业版,只要交钱,问题都好解决。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-4-22 11:09 , Processed in 0.062502 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表