介绍
水星浏览器是在2016年时创建的一个浏览器项目, 它的前身有Kirinoium、遥望浏览器、易CEF、CEF视图等等。项目的目标是跟踪 Google Chromium 嵌入式分支做成一个免费开源的易语言版 chromium 实现, 让广大易开发者们享受到来自 Chromium 的现代化浏览器技术。水星浏览器的典型应用场景包括:
作为一个兼容HTML5的浏览器控件嵌入到应用程序中。
创建一个轻量化的壳浏览器用于托管Web技术开发的应用程序。
使用浏览器进行自动化的Web适应性测试。
编译
编译支持库需要准备:
Visual Studio 2015 或者更高版本。
Windows 10 SDK 18362.0
Visual Studio Code
项目: src/aquarius2 为实现易语言调用CEF所需要的胶水代码工程。已进行自动化配置可使用Visual Studio打开.sln 项目方案进行编译。
项目: src/TestRenderer 为多进程模式下用于挂载浏览器进程的壳程序工程, 壳程序提供了执行Javascript脚本, DOM访问, 以及一些其它功能性方法。已进行自动化配置可使用Visual Studio打开.sln 项目方案进行编译。
项目: src/ 为支持库工程代码, 项目方案使用Visual Studio Code构建, 在项目根文件夹下打开Visual Studio Code运行生成任务即可编译支持库。
安装
选择所需版本安装程序下载至本地磁盘上, 双击运行安装向导程序进行安装。如果本机已装有支持库, 需要先执行移除操作后在进行安装。
装有支持库内测版的电脑需要在系统环境变量"Path"中将测试版本运行时目录删除。
选择安装文件时, 应选择安装到易语言客户端运行目录
并在安装完成时勾选"启用水星浏览器支持库" 以安装支持库文件到易语言中。
支持库测试例程位于: 安装目录\ecef_runtime\release\samples\水星浏览器测试.exe
在创建浏览器之前, 需要先对支持库进行初始化设置。从启动窗口或是从启动子程序开始应用程序并执行第一个支持库方法: 进程初始化()
.版本 2
.支持库 ecef
.子程序 __启动窗口_创建完毕
进程初始化 (, )
如果希望配置一些浏览器的初始化选项, 则使用方法: 创建初始化设置() 获取设置对象以配置初始化信息并将对象传递到: 进程初始化() 方法以完成设置。
.版本 2
.支持库 ecef
.子程序 __启动窗口_创建完毕
.局部变量 初始化选项, 水星初始化设置
初始化选项 = 创建初始化设置 ()
' 设置初始化信息
初始化选项.全局缓存目录 (取运行目录 () + “\userdata”)
初始化选项.用户数据目录 (取运行目录 () + “\userdata”)
' 应用设置
进程初始化 (初始化选项, )
一些常用的初始化选项:
-
全局缓存目录 设置磁盘上用于存放缓存数据的位置。如果此项为空, 某些功能将使用内存缓存, 多数功能将使用临时的磁盘缓存。 形如本地存储的HTML5数据库只能在设置了缓存路径后才能跨 session 存储。
-
语言环境 此设置项将传递给Blink。如果此项为空, 将使用默认值"en-US"。此项额可以通过命令行参数 –lang 设置。
-
用户数据目录 设置用户数据存储(例如拼写检查字段文件)位置。此值作为所有浏览器创建时使用的缺省值, 如非特别指定, 所有的浏览器都将会共享此设置。保持为空时则默认不会将数据存储到磁盘上。
-
用户代理标识 设置此值作为: User-Agent HTTP 标头的返回值。
-
保持用户首选项 设置此值, 用户首选项数据将使用JSON文件保留到缓存目录中。
-
保持会话cookies 设置此值, 在全局cookies管理器中保留会话cookies(它们将没有有效期)。
-
接收语言字符串 设置全局的HTTP接收语言字符串,以逗号分隔的语言代码字符串数组,不可以使用空格, 这些字符串值将在"Accept-Language" HTTP标头中使用。
命令行
浏览器执行初始化后将会触发第一个事件 "进程即将初始化",水星浏览器中的许多特性都可以使用命令行参数进行配置。 这些参数采用 "–some-argument[=optional-param]" 的形式设置。 如果需要将指定的命令行参数以编程方式传入浏览器, 则应在此事件中进行。
.版本 2
.支持库 ecef
.子程序 _水星铬浏览框1_进程即将初始化
.参数 进程类型, 文本型
.参数 命令行, 水星命令行, 参考
加载 flash 播放器插件
.版本 2
.支持库 ecef
.子程序 _水星铬浏览框1_进程即将初始化
.参数 进程类型, 文本型
.参数 命令行, 水星命令行, 参考
' 加载flash
命令行.置配置项值 (“ppapi-flash-version”, “29.0.0.140”)
命令行.置配置项值 (“ppapi-flash-path”, “d:\flash\pepflashplayer32_29_0_0_140.dll”)
加载自定义插件(PPAPI)
水星浏览器支持加载自定义 PPAPI 插件, 插件使用命令行参数 "–register-pepper-plugins=…" 加载, 最大允许加载插件数量为64个。
--register-pepper-plugins = + *( LWS + "," + LWS + )
= + [ "#" + + ["#" + + ["#" +
]]] + *1( LWS + ";" + LWS + )
= + [ LWS + "#" + LWS + ]
格式说明:
--register-pepper-plugins = <插件入口(一般为DLL文件名)> + 可选的( [#插件名称 [#插件描述 [
#插件版本] ] ] );MIME类型 + 可选的[#扩展信息]
如需加载多个插件使用","分隔。
完整例子:
--register-pepper-plugins = "d:\my\plugins\my-plugins.dll#插件的名字#插件的描述信息#插件版本;
application/x-ppapi-test-xxxx#插件扩展信息,d:\my\plugins\my-plugins2.dll#第二个插件#第二个插件
的描述信息#第二个插件的版本;application/x-ppapi-test-xxxx#第二个插件的扩展信息,..."
.版本 2
.支持库 ecef
.子程序 _水星铬浏览框1_进程即将初始化
.参数 进程类型, 文本型
.参数 命令行, 水星命令行, 参考
' 加载ppapi
命令行.置配置项值 (“--register-pepper-plugins”, “d:\my\plugins\my-plugins.dll#插件的名字#插件的描述信息#插件版本;application/x-ppapi-test-xxxx#插件扩展信息,d:\my\plugins\my-plugins2.dll#第二个插件#第二个插件的描述信息#第二个插件的版本;application/x-ppapi-test-xxxx#第二个插件的扩展信息,...”)
如何禁止浏览器生成 debug.log 文件?
使用命令行进行以下设置:
.版本 2
.支持库 ecef
.支持库 spec
.子程序 _水星铬浏览框1_进程即将初始化
.参数 进程类型, 文本型
.参数 命令行, 水星命令行, 参考
调试输出 (“进程即将初始化”)
命令行.置配置项值 (“log-severity”, “disable”)
如何让浏览器自动播放视频?
使用命令行进行以下设置:
.版本 2
.支持库 ecef
.支持库 spec
.子程序 _水星铬浏览框1_进程即将初始化
.参数 进程类型, 文本型
.参数 命令行, 水星命令行, 参考
调试输出 (“进程即将初始化”)
命令行.置配置项值 (“autoplay-policy”, “no-user-gesture-required”)
命令行.置配置项值 (“disable-features”, “PreloadMediaEngagementData, MediaEngagementBypassAutoplayPolicies”)
从浏览框中获取浏览器
.版本 2
.支持库 ecef
.子程序 _按钮_取浏览器_被单击
.局部变量 浏览器, 水星浏览器
.如果真 (水星铬浏览框1.取浏览器数量 () > 0)
浏览器 = 水星铬浏览框1.取浏览器索引 (0)
.如果真结束
加载一个URL
.版本 2
.支持库 ecef
.子程序 _按钮_取浏览器_被单击
.局部变量 浏览器, 水星浏览器
.如果真 (水星铬浏览框1.取浏览器数量 () > 0)
浏览器 = 水星铬浏览框1.取浏览器索引 (0)
浏览器.取主框架 ().加载URL (“some_url”)
.如果真结束
执行浏览器回退操作
.版本 2
.支持库 ecef
.子程序 _按钮_取浏览器_被单击
.局部变量 浏览器, 水星浏览器
.如果真 (水星铬浏览框1.取浏览器数量 () > 0)
浏览器 = 水星铬浏览框1.取浏览器索引 (0)
浏览器.回退 ()
.如果真结束
获取主 iframe 中的HTML内容:
.版本 2
.支持库 ecef
.子程序 _按钮_取浏览器_被单击
.局部变量 浏览器, 水星浏览器
.局部变量 html, 文本型
.如果真 (水星铬浏览框1.取浏览器数量 () > 0)
浏览器 = 水星铬浏览框1.取浏览器索引 (0)
html = 浏览器.取主框架 ().取页面源码 ()
.如果真结束
浏览器窗口的原生句柄可以用下面的代码获取:
.版本 2
.支持库 ecef
.子程序 _按钮_取浏览器_被单击
.局部变量 浏览器, 水星浏览器
.局部变量 窗口句柄, 整数型
.如果真 (水星铬浏览框1.取浏览器数量 () > 0)
浏览器 = 水星铬浏览框1.取浏览器索引 (0)
窗口句柄 = 浏览器.取窗口句柄 ()
.如果真结束
使用窗口句柄获取浏览器
.版本 2
.支持库 ecef
.子程序 _按钮_取浏览器_被单击
.局部变量 浏览器, 水星浏览器
浏览器 = 水星铬浏览框1.取浏览器 (窗口句柄)
执行Javascript脚本
运行Javascript表达式通过 水星框架 类型支持。 执行没用返回值的Javascript表达式使用方法 框架.执行脚本(), 具有返回值的Javascript表达式则应该使用方法 框架.执行脚本2()
.版本 2
.支持库 ecef
.子程序 _按钮_演示_被单击
.局部变量 浏览器, 水星浏览器
浏览器 = 水星铬浏览框1.取浏览器 (窗口句柄)
' 执行没有返回值的javascript表达式
浏览器.取主框架 ().执行脚本 (“alert('hello world')”, “demo_samples”, 0)
执行具有返回值的表达式
.版本 2
.支持库 ecef
.支持库 spec
.子程序 _按钮_演示_被单击
.局部变量 浏览器, 水星浏览器
.局部变量 异常信息, 文本型
.局部变量 执行结果, 水星通用型
浏览器 = 水星铬浏览框1.取浏览器 (窗口句柄)
' 执行具有返回值的javascript表达式
执行结果 = 浏览器.取主框架 ().执行脚本2 (“(function(){ return 'hello world'; })();”, “demo_samples”, 0, 异常信息)
.如果真 (执行结果.是否有效 ())
调试输出 (执行结果.取文本型 ())
.如果真结束
浏览器生命周期
创建
浏览器生命周期从执行 水星铬浏览框.创建浏览器开始() 开始。 可以在事件 "进程初始化完毕" 中或者再此事件之后的任意方便的位置添加创建代码。
.版本 2
.支持库 ecef
.子程序 _水星铬浏览框1_进程初始化完毕
' 创建浏览器作为子窗口
水星铬浏览框1.创建浏览器 (创建子窗口设置 (水星铬浏览框1.取窗口句柄 (), 0, 0, 水星铬浏览框1.宽度, 水星铬浏览框1.高度), “http://itwitch.cc/ecef”, , )
浏览器创建完成后事件 "浏览器创建完毕" 会立即被触发。宿主程序可以在此事件中获取并保存浏览器对象的引用。
.版本 2
.支持库 ecef
.程序集 窗口程序集_启动窗口
.程序集变量 集_浏览器, 水星浏览器
.程序集变量 集_浏览器窗口句柄, 整数型
.子程序 __启动窗口_创建完毕
进程初始化 (, )
.子程序 _水星铬浏览框1_进程初始化完毕
' 创建浏览器作为子窗口
水星铬浏览框1.创建浏览器 (创建子窗口设置 (水星铬浏览框1.取窗口句柄 (), 0, 0, 水星铬浏览框1.宽度, 水星铬浏览框1.高度), “http://itwitch.cc/ecef”, , )
.子程序 _水星铬浏览框1_浏览器创建完毕
.参数 浏览器, 水星浏览器, 参考
' 保存浏览器对象引用有以下几种方法:
' 1.保存对象引用, 保存对象的引用可以在任意位置直接访问浏览器对象。
集_浏览器 = 浏览器
' 2.保存窗口句柄引用, 保存浏览器的窗口句柄引用, 保存窗口句柄可以通过使用方法 水星铬浏览框.取浏览器() 重新获得浏览器对象。
集_浏览器窗口句柄 = 浏览器.取窗口句柄 ()
' 3.索引引用, 浏览器索引引用自动保存于浏览框中, 通过方法 水星铬浏览框.取浏览器索引() 获得浏览器对象, 索引从0开始, 索引顺序为浏览器创建顺序。
打开
如果用户在浏览器内点击了具有 "target=_blank" 属性的连接则将会触发事件 "浏览器将要打开" 。
.版本 2
.支持库 ecef
.子程序 _水星铬浏览框1_浏览器将要打开, 逻辑型
.参数 浏览器, 水星浏览器, 参考
.参数 框架, 水星框架, 参考
.参数 目标URL, 文本型
.参数 目标框架名称, 文本型
.参数 链接的打开方式, 整数型
.参数 是否为手势点击, 逻辑型
.参数 窗口设置, 水星窗口设置, 参考
.参数 浏览器设置, 水星浏览器设置, 参考
.参数 是否禁止脚本访问, 整数型, 参考
' 如果希望链接在源浏览器中导航, 则可设置来源框架加载目标URL, 以此导航至新地址。
框架.加载URL (目标URL)
' 要促使浏览器取消创建窗口则返回真
返回 (真)
允许浏览器创建窗口则应为新窗口设置窗口样式信息, 并返回假。
.版本 2
.支持库 ecef
.子程序 _水星铬浏览框1_浏览器将要打开, 逻辑型
.参数 浏览器, 水星浏览器, 参考
.参数 框架, 水星框架, 参考
.参数 目标URL, 文本型
.参数 目标框架名称, 文本型
.参数 链接的打开方式, 整数型
.参数 是否为手势点击, 逻辑型
.参数 窗口设置, 水星窗口设置, 参考
.参数 浏览器设置, 水星浏览器设置, 参考
.参数 是否禁止脚本访问, 整数型, 参考
' 允许浏览器创建新窗口以导航至新链接则应为新浏览器窗口设置样式信息
' 设置为子窗口
窗口设置.置为子窗口 (水星铬浏览框1.取窗口句柄 (), 0, 0, 水星铬浏览框1.宽度, 水星铬浏览框1.高度)
' 返回假让浏览器继续进行
返回 (假)
关闭
关闭浏览器使用 水星铬浏览框.关闭浏览器() 方法。 关闭浏览器后 "浏览器将要关闭" 活 "浏览器即将消耗" 事件会依次被触发。
.版本 2
.支持库 ecef
.子程序 _水星铬浏览框1_浏览器将要关闭, 逻辑型
.参数 浏览器, 水星浏览器, 参考
' 在此事件中宿主程序可以进一步决定浏览器是否可以关闭。
' 如果希望浏览器继续运行并忽略关闭请求则应返回真
返回 (真)
.子程序 _水星铬浏览框1_浏览器即将销毁
.参数 浏览器, 水星浏览器, 参考
' 浏览器将被销毁前最后一个调用的事件。
有没有办法修改浏览器里的脚本,通过修改“浏览器.取主框架 ().取页面源码 ()”里的源码可以吗,可以的话怎么修改呢