搜索
查看: 2921|回复: 10

[web] CEF3(Chromium内核)网页控件、已修正Flash插件加载弹窗问题

[复制链接]

170

主题

2505

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

cef3.jpg

cef32.png

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

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

缺点:
1、体积大、很大很大,虽然体积大,但是不支持MP4视频(可以支持Flash插件)
2、因为是商业收费版,试用版打开一个网页弹出一堆未注册对话框,这个我已经用API钩子取消掉了。
这个纯粹是练练API钩子自己玩一下,自己电脑上大家试用一下没关系,但是发布软件产品请购买正版控件。
3、不支持XP,至少要求win7 sp1以上操作系统,而且要安装VC2015运行库

这个库部署麻烦了一些,
但是这个库的源码使用了一些有意思的小技巧,大家可以当范例玩玩
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();
今天把这个扩展库继续改进了一下,支持生成独立EXE文件了,可以支持中文路径了,增加了JS与aardio交互的例子。

2018.7.8 更新已支持flash插件、支持自定义命令行参数。
自定义命令行参数非常简单,可以直接在web.cef3构造参数中添加一个或多个启动参数,例如:
var cef3 = web.cefx(winform,,"--disable-gpu")
至于flash,webkitx官方提供的方法不管用,总是需要在网页上右键点一下手动运行flash插件才能播放flash,经过反复测试,发现默认加上下面的启动参数就可以了:
commandLineSwitches = commandLineSwitches + ` --disable-bundled-ppapi-flash --ppapi-flash-version=30.0.0.113 --register-pepper-plugins="pepflashplayer32_30_0_0_113.dll;application/x-shockwave-flash"`;

此扩展库仅供测试,请不要用于产品开发,本人不提供任何技术支持!

回复

使用道具 举报

34

主题

163

帖子

943

积分

荣誉会员

吃白菜的鸟

Rank: 8Rank: 8

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

使用道具 举报

8

主题

40

帖子

232

积分

二级会员

Rank: 3Rank: 3

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

使用道具 举报

5

主题

128

帖子

1386

积分

四级会员

Rank: 6Rank: 6

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

使用道具 举报

12

主题

680

帖子

3990

积分

荣誉会员

子非魚、安知魚之樂

Rank: 8Rank: 8

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

使用道具 举报

11

主题

37

帖子

307

积分

二级会员

Rank: 3Rank: 3

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

使用道具 举报

6

主题

18

帖子

122

积分

荣誉会员

Rank: 8Rank: 8

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

使用道具 举报

170

主题

2505

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13758
 楼主| 发表于 2018-5-10 18:13:33 | 显示全部楼层
bjtv 发表于 2018-4-3 16:09
可能是习惯问题,没有提供external 接口,我是不敢轻易使用的,因为不知道有不有坑。
虽然这个组件本身没有提供external,
但是我刚才使用aardio扩展出了这个接口,上面的范例已更新。
回复

使用道具 举报

0

主题

2

帖子

13

积分

新手入门

Rank: 1

积分
13
发表于 2018-5-14 21:09:03 | 显示全部楼层
打开网站后, 想下载里面的东西下载不了,能下载么 ?
回复

使用道具 举报

2

主题

5

帖子

36

积分

新手入门

Rank: 1

积分
36
发表于 2018-5-15 18:07:28 | 显示全部楼层
这个external要在页面上用<script src="/aardio.js">,一旦url指向了一个外部的连接,总是提示找不到http://server/aardio.js,cef总是把这个虚拟的js文件当成真实文件,导致这套external机制失效了,js无法调用arridio定义的函数
回复

使用道具 举报

170

主题

2505

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13758
 楼主| 发表于 2018-5-20 00:18:16 | 显示全部楼层
wxh101 发表于 2018-5-15 18:07
这个external要在页面上用,一旦url指向了一个外部的连接,总是提示找不到http://server/aardio.js,cef总 ...
可以先看一下范例、文档,
在文档里已有说明,这个功能不是用在外部链接上。

只有自己写界面才需要用到 external 。
如果你访问的是外部链接,没必要用到external 。
external的作用是让JS可以调用aardio服务端,如果你的网页不是在aardio服务端中运行,你要external 干啥呢?


回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2018-7-16 23:57 , Processed in 0.078126 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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