介绍
水星浏览器是在2016年时创建的一个浏览器项目, 它的前身有Kirinoium、遥望浏览器、易CEF、CEF视图等等。项目的目标是跟踪 Google Chromium 嵌入式分支做成一个免费开源的易语言版 chromium 实现, 让广大易开发者们享受到来自 Chromium 的现代化浏览器技术。水星浏览器的典型应用场景包括:
作为一个兼容HTML5的浏览器控件嵌入到应用程序中。
创建一个轻量化的壳浏览器用于托管Web技术开发的应用程序。
使用浏览器进行自动化的Web适应性测试。
更新概览
本次更新在水星浏览器1.0+版的基础上进行了综合的结构性的升级, 着重提升稳定性以及多线程性能 , 主要解决了以下这些重要的严重问题和缺陷:
支持库结构化升级, 相对于1.0+版本, 本次升级支持库采用RAII和智能指针技术构建类型对象, 全面提升支持库稳定性并解决长久以来的内存过渡消耗与占用问题。
内核更新至 Chromium 80.0.3987.163 / CEF 80.1.16 版本, 支持多媒体音视频播放。
支持库全面换装支持多进程模式, 单进程模式已从 Chromium 68.0.3440.42 / CEF 3440 开始废除支持。
修复了在1.0版本中索引到错误框架会崩溃的问题。
修复了在1.0版本中执行异常脚本会崩溃的问题以及执行不一致的问题。
完善了支持了单/多浏览器环境隔离(提供独立的缓存与cookies存储设置)。
支持了基于 DOM 结构的网页元素访问。
支持了首选项(Preerences) 功能设置。
支持了静音模式。
支持了移动端设备的模拟功能, 包含设备模拟以及手势合成。
支持了以编程方式访问浏览器的功能。
支持了所有种类的请求发起方式, 包含: uri-data request, navigate request, url request, 浏览器无关 url request。
支持了 Google Chrome Extension 扩展程序。
新增了HTTP Server服务器类型, 用于提供小容量的 HTTP / Websocket 会话服务。
新增了网页套接字(Websocket)类型, 用于支持 Websocket Client 端会话服务。
新增了"CefQuery"功能用于支持Javascript与浏览器的交互访问详细介绍见例程。
扩充了浏览器事件以细化业务代码的处理时机, 扩充后浏览器拥有超60个事件。
改进了资源处理模型, 提供了更多更完整的资源处理与操作时机, 资源处理模型用于观察(Observer)浏览器资源的加载过程。
改进了cookies的操作方式, 提供了更为简易的操作接口并支持以文本方式进行导入导出。
改进了HOOK脚本功能, 提供了优先级更高更加稳定的操作方式。
改进了不能任意时机覆盖用户代理标识(User-Agent)的限制。
改进了所有异步访问接口与消息循环提供更友好的同步接口以及多线程消息模型以消除易语言与CEF多进程架构间的差异。
支持库全面中文化支持, 方便理解和快速输入。
更多详细改进信息见例程: \samples\水星浏览器测试.e
下载
水星项目使用 Github 代码仓库进行工程管理与下载分发。
仓库地址: https://github.com/kirino17/ecef
release版: https://github.com/kirino17/ecef/releases
编译
编译见项目仓库说明信息。
安装
选择所需版本安装程序下载至本地磁盘上, 双击运行安装向导程序进行安装。如果本机已装有支持库, 需要先执行移除操作后在进行安装。
装有支持库内测版的电脑需要在系统环境变量"Path"中将测试版本运行时目录删除。
选择安装文件时, 应选择安装到易语言客户端运行目录
并在安装完成时勾选"启用水星浏览器支持库" 以安装支持库文件到易语言中。
支持库测试例程位于: 安装目录\ecef_runtime\release\samples\水星浏览器测试.exe
授权
水星浏览器支持库使用 BSD-3 Clause 开源协议免费授权, 欢迎使用。
常见问题指引
常见问题帮助
功能介绍
一个最简单的浏览器
====================================================
从浏览框中获取浏览器
如果真 (水星铬浏览框1. 取浏览器数量 () > 0 )浏览器 = 水星铬浏览框1. 取浏览器索引 (0 )
加载一个URL
如果真 (水星铬浏览框1. 取浏览器数量 () > 0 )浏览器 = 水星铬浏览框1. 取浏览器索引 (0 )浏览器. 取主框架 (). 加载URL (“some_url”)
执行浏览器回退操作
如果真 (水星铬浏览框1. 取浏览器数量 () > 0 )浏览器 = 水星铬浏览框1. 取浏览器索引 (0 )浏览器. 回退 ()
获取主 iframe 中的HTML内容:
变量名 | 类 型 | 静态 | 数组 | 备 注 | 浏览器 | 水星浏览器 | | | html | 文本型 | | | 如果真 (水星铬浏览框1. 取浏览器数量 () > 0 )浏览器 = 水星铬浏览框1. 取浏览器索引 (0 )html = 浏览器. 取主框架 (). 取页面源码 ()
浏览器窗口的原生句柄可以用下面的代码获取:
变量名 | 类 型 | 静态 | 数组 | 备 注 | 浏览器 | 水星浏览器 | | | 窗口句柄 | 整数型 | | | 如果真 (水星铬浏览框1. 取浏览器数量 () > 0 )浏览器 = 水星铬浏览框1. 取浏览器索引 (0 )窗口句柄 = 浏览器. 取窗口句柄 ()
使用窗口句柄获取浏览器
执行Javascript脚本
运行Javascript表达式通过 水星框架 类型支持。 执行没用返回值的Javascript表达式使用方法 框架.执行脚本(), 具有返回值的Javascript表达式则应该使用方法 框架.执行脚本2() 。
浏览器 = 水星铬浏览框1. 取浏览器 (窗口句柄 ) 浏览器. 取主框架 (). 执行脚本 (“alert('hello world')”, “demo_samples”, 0 )
执行具有返回值的表达式
变量名 | 类 型 | 静态 | 数组 | 备 注 | 浏览器 | 水星浏览器 | | | 异常信息 | 文本型 | | | 执行结果 | 水星通用型 | | |
浏览器 = 水星铬浏览框1. 取浏览器 (窗口句柄 ) 执行结果 = 浏览器. 取主框架 (). 执行脚本2 (“(function(){ return 'hello world'; })();”, “demo_samples”, 0, 异常信息 )如果真 (执行结果. 是否有效 ()) 调试输出 (执行结果. 取文本型 ())
开始
初始化
在创建浏览器之前, 需要先对支持库进行初始化设置。从启动窗口或是从启动子程序开始应用程序并执行第一个支持库方法: 进程初始化()
如果希望配置一些浏览器的初始化选项, 则使用方法: 创建初始化设置() 获取设置对象以配置初始化信息并将对象传递到: 进程初始化() 方法以完成设置。
变量名 | 类 型 | 静态 | 数组 | 备 注 | 初始化选项 | 水星初始化设置 | | |
初始化选项 = 创建初始化设置 () 初始化选项. 全局缓存目录 (取运行目录 () + “\userdata”)初始化选项. 用户数据目录 (取运行目录 () + “\userdata”) 进程初始化 (初始化选项, )
一些常用的初始化选项:
全局缓存目录 设置磁盘上用于存放缓存数据的位置。如果此项为空, 某些功能将使用内存缓存, 多数功能将使用临时的磁盘缓存。 形如本地存储的HTML5数据库只能在设置了缓存路径后才能跨 session 存储。
语言环境 此设置项将传递给Blink。如果此项为空, 将使用默认值"en-US"。此项额可以通过命令行参数 --lang 设置。
用户数据目录 设置用户数据存储(例如拼写检查字段文件)位置。此值作为所有浏览器创建时使用的缺省值, 如非特别指定, 所有的浏览器都将会共享此设置。保持为空时则默认不会将数据存储到磁盘上。
用户代理标识 设置此值作为: User-Agent HTTP 标头的返回值。
保持用户首选项 设置此值, 用户首选项数据将使用JSON文件保留到缓存目录中。
保持会话cookies 设置此值, 在全局cookies管理器中保留会话cookies(它们将没有有效期)。
接收语言字符串 设置全局的HTTP接收语言字符串,以逗号分隔的语言代码字符串数组,不可以使用空格, 这些字符串值将在"Accept-Language" HTTP标头中使用。
命令行
浏览器执行初始化后将会触发第一个事件 "进程即将初始化"
水星浏览器中的许多特性都可以使用命令行参数进行配置。 这些参数采用 "--some-argument[=optional-param]" 的形式设置。 如果需要将指定的命令行参数以编程方式传入浏览器, 则应在此事件中进行。
加载 flash 播放器插件
|
_水星铬浏览框1_进程即将初始化 | | | |
进程类型 | 文本型 | | | | 命令行 | 水星命令行 | | | |
命令行. 置配置项值 (“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 = <plugin-entry> + *( LWS + "," + LWS + <plugin-entry> )
<plugin-entry> = <file-path> + [ "#" + <name> + ["#" + <description> + ["#" + <version>
]]] + *1( LWS + ";" + LWS + <mime-type-data> )
<mime-type-data> = <mime-type> + [ LWS + "#" + LWS + <extension> ]
格式说明:
--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#第二个插件的扩展信息,..."
代码
浏览器生命周期
创建
浏览器生命周期从执行 水星铬浏览框.创建浏览器开始() 开始。 可以在事件 "进程初始化完毕" 中或者再此事件之后的任意方便的位置添加创建代码。
水星铬浏览框1. 创建浏览器 (创建子窗口设置 (水星铬浏览框1. 取窗口句柄 (), 0, 0, 水星铬浏览框1.宽度, 水星铬浏览框1.高度 ), “http://itwitch.cc/ecef”, , )
浏览器创建完成后事件 "浏览器创建完毕" 会立即被触发。宿主程序可以在此事件中获取并保存浏览器对象的引用。
窗口程序集名 | 保 留 | 保 留 | 备 注 | 窗口程序集_启动窗口 | | | | 变量名 | 类 型 | 数组 | 备 注 | 集_浏览器 | 水星浏览器 | | 集_浏览器窗口句柄 | 整数型 | | 进程初始化 (, ) 水星铬浏览框1. 创建浏览器 (创建子窗口设置 (水星铬浏览框1. 取窗口句柄 (), 0, 0, 水星铬浏览框1.宽度, 水星铬浏览框1.高度 ), “http://itwitch.cc/ecef”, , )|
_水星铬浏览框1_浏览器创建完毕 | | | |
浏览器 | 水星浏览器 | | | |
集_浏览器 = 浏览器 集_浏览器窗口句柄 = 浏览器. 取窗口句柄 ()
打开
如果用户在浏览器内点击了具有 "target=_blank" 属性的连接则将会触发事件 "浏览器将要打开" 。
允许浏览器创建窗口则应为新窗口设置窗口样式信息, 并返回假。
关闭
关闭浏览器使用 水星铬浏览框.关闭浏览器() 方法。 关闭浏览器后 "浏览器将要关闭" 活 "浏览器即将消耗" 事件会依次被触发。
水星浏览器 和 水星框架
水星浏览器和水星框架对象被用来发送命令给浏览器以及在事件中获取状态信息。 每个水星浏览器对象都包含一个主框架对象, 主框架对象代表页面的顶层 iframe ; 同时每个浏览器对象可以包含零个或多个的子框架对象, 分别代表不同的子 iframe 。 例如, 一个浏览器加载了两个 iframe , 则该浏览器对象拥有三个框架对象( 顶层 iframe 和 两个子 iframe )。
获取主框架
使用框架
变量名 | 类 型 | 静态 | 数组 | 备 注 | 浏览器 | 水星浏览器 | | | 主框架 | 水星框架 | | |
浏览器 = 水星铬浏览框1. 取浏览器 (hwnd )主框架 = 浏览器. 取主框架 () 主框架. 加载URL (“http://itwitch.cc/ecef”)
框架的列举方法
变量名 | 类 型 | 静态 | 数组 | 备 注 | 浏览器 | 水星浏览器 | | | 框架名称数组 | 文本型 | | 0 | 框架标识符数组 | 长整数型 | | 0 | 框架数组 | 水星框架 | | 0 | 框架 | 水星框架 | | |
浏览器 = 水星铬浏览框1. 取浏览器 (hwnd ) 框架名称数组 = 浏览器. 取所有框架名称 () 如果真 (取数组成员数 (框架名称数组 ) > 0 )框架 = 浏览器. 从名称取框架 (框架名称数组 [1 ]) 框架标识符数组 = 浏览器. 取所有框架标识符 () 如果真 (取数组成员数 (框架标识符数组 ) > 0 )框架 = 浏览器. 从标识符取框架 (框架标识符数组 [1 ]) 框架数组 = 浏览器. 取所有框架 () 如果真 (取数组成员数 (框架数组 ) > 0 )框架 = 框架数组 [1 ]
文件下载
浏览器产生下载请求时(包含调用方法 : 水星浏览器.启动下载() ), 事件 "浏览器即将下载" 将会被触发。 参数对象 "下载项" 指示了下载文件的状态信息。 执行类型方法 " 下载项.保存到() " 方法以允许浏览器下载资源并为资源提供磁盘存储位置。 省略调用此方法则浏览器将会忽略下载请求。
如果通过了资源的下载请求浏览器将会每隔一秒触发一次事件 "浏览器下载进度已更新" 以告知当前资源的下载状态。要控制资源的下载行为可以使用参数 "下载项" 提供的类型方法: 下载项.取消下载() , 下载项.暂停下载() , 下载项.恢复下载() 等方法进行设置。
上下文菜单
浏览器上下文菜单产生的事件由 "浏览器菜单即将打开" 传递, 如果希望实现自定义菜单则应实现事件 "浏览器显示自定义菜单" 。 参数 "菜单信息" 提供了与菜单上下文有关的状态信息, 包括请求的来源, 页面地址以及页面期望创建的菜单类型等等。 参数 "菜单" 提供了一组菜单功能实现接口, 详细信息见类型说明。
|
_水星铬浏览框1_浏览器菜单即将打开 | | | |
浏览器 | 水星浏览器 | | | | 框架 | 水星框架 | | | | 菜单信息 | 水星菜单信息 | | | | 菜单 | 水星菜单 | | | | 调试输出 (“浏览器菜单即将打开”) 调试输出 (“菜单位置: ”, 菜单信息. 取坐标X (), 菜单信息. 取坐标Y ()) 菜单. 添加菜单项 (2000, “测试菜单”) 菜单. 添加分隔符 () 菜单. 添加复选菜单项 (2001, “测试复选菜单”) 菜单. 添加单选菜单项 (2002, “测试单选菜单1”, 990 )菜单. 添加单选菜单项 (2003, “测试单选菜单2”, 990 ) 子菜单 = 菜单. 添加子菜单项 (2004, “测试子菜单”)子菜单. 添加菜单项 (3001, “子菜单项”)
显示自定义菜单
DOM
查询HTML页面DOM结构使用 框架.取文档对象() 方法。
变量名 | 类 型 | 静态 | 数组 | 备 注 | 浏览器 | 水星浏览器 | | | 框架 | 水星框架 | | | dom | 水星网页文档对象 | | |
浏览器 = 水星铬浏览框1. 取浏览器 (hwnd )框架 = 浏览器. 取主框架 ()dom = 框架. 取文档对象 ()
HTML DOM 结构以及 DOM 元素 分别使用类型 "水星网页文档对象" 、"水星网页文档元素" 表示。 需要注意的是, 不要保留 DOM 对象以及DOM 元素的索引到局部变量的作用域之外使用。 这将导致对象无法被及时释放。
一些例子:
变量名 | 类 型 | 静态 | 数组 | 备 注 | 浏览器 | 水星浏览器 | | | 框架 | 水星框架 | | | dom | 水星网页文档对象 | | | head | 水星网页文档元素 | | | body | 水星网页文档元素 | | | document | 水星网页文档元素 | | |
浏览器 = 水星铬浏览框1. 取浏览器 (hwnd )框架 = 浏览器. 取主框架 () dom = 框架. 取文档对象 () 调试输出 (dom. 取文档类型 ()) 调试输出 (dom. 取文档标题 ()) head = dom. 取HEAD元素 () body = dom. 取BODY元素 () document = dom. 取根元素 ()
遍历元素
变量名 | 类 型 | 静态 | 数组 | 备 注 | 浏览器 | 水星浏览器 | | | 框架 | 水星框架 | | | dom | 水星网页文档对象 | | | document | 水星网页文档元素 | | | 首个子元素 | 水星网页文档元素 | | | 最后一个子元素 | 水星网页文档元素 | | | 下一个兄弟元素 | 水星网页文档元素 | | | 上一个兄弟元素 | 水星网页文档元素 | | |
浏览器 = 水星铬浏览框1. 取浏览器 (hwnd )框架 = 浏览器. 取主框架 () dom = 框架. 取文档对象 () document = dom. 取根元素 () 首个子元素 = document. 取首个子元素 () 最后一个子元素 = document. 取最后一个子元素 () 下一个兄弟元素 = 首个子元素. 取下一兄弟元素 () 上一个兄弟元素 = 最后一个子元素. 取上一兄弟元素 () 调试输出 (document. 是否有子元素 ())
CSS 选择器
除了支持标准的DOM结构遍历之外, 水星浏览器还支持使用 CSS 选择器索引元素。
查找单个元素
变量名 | 类 型 | 静态 | 数组 | 备 注 | 浏览器 | 水星浏览器 | | | 框架 | 水星框架 | | | dom | 水星网页文档对象 | | | 元素 | 水星网页文档元素 | | |
浏览器 = 水星铬浏览框1. 取浏览器 (hwnd )框架 = 浏览器. 取主框架 () dom = 框架. 取文档对象 () 元素 = dom. 查询元素 (“#test > div > div > p”)
查找所有符合的元素
变量名 | 类 型 | 静态 | 数组 | 备 注 | 浏览器 | 水星浏览器 | | | 框架 | 水星框架 | | | dom | 水星网页文档对象 | | | 元素素组 | 水星网页文档元素 | | 0 |
浏览器 = 水星铬浏览框1. 取浏览器 (hwnd )框架 = 浏览器. 取主框架 () dom = 框架. 取文档对象 () 元素素组 = dom. 查询所有元素 (“#test > div > ul > li”)
支持库支持的CSS 选择器如下:
隐身(无痕)模式
水星浏览器支持使用隐身模式访问页面, 隐身模式下 不同浏览器间不共享缓存设置与cookies存储, 并且浏览器缓存数据仅会保留在内存中, 不会写出到磁盘上, 也不会从磁盘文件装载(除临时文件外) 。隐身模式使用非常简单, 由 水星铬浏览框.创建浏览器() 方法的第四个参数提供设置。
隐身模式下所有的浏览器彼此间相互隔离不会共享缓存以及cookies数据, 但有一个例外清空, 如果一个浏览器是由另一个浏览器创建的它们将使用同一个缓存设置和cookies存储。由浏览器打开的浏览器是说用户在浏览器中点击链接时产生的浏览器。例如: 有 浏览器A 和 浏览器B , 浏览器A是通过 水星铬浏览框.创建浏览器() 方法创建的并且设置了隐身模式参数, 而浏览器B 是由用户在浏览器A中点击链接后产生的浏览器, 那么浏览器B将共享使用浏览器A的缓存设置以及cookies存储。 如果希望获取某一个浏览器的所有共享浏览器可以使用方法: 水星铬浏览框.取同源浏览器() 获得。
代理方案
水星浏览器支持使用类似 Google Chrome 一样的方式使用代理, 通过命令行参数传递代理信息。
---proxy-server=host:port
指定用于请求的 HTTP/SOCKS4/SOCKS5 代理服务器。
个人代理服务器使用以下格式:
[<proxy-scheme>://]<proxy-host>[:proxy-port]
其中<proxy-scheme>是代理服务器的协议, 并且是以下之一:
"https" , "socks" , "socks4" , "socks5".
如果省略 <proxy-scheme> , 则默认为: "http" 。 另请注意, "socks" 等同于
"socks5"
一些例子:
--proxy-server="foopy:99"
使用HTTP代理"foopy:99"加载所有URL。
--proxy-server="socks://foobar:1080"
使用SOCKS v5代理"foobar:1080"加载所有URL。
--proxy-server="socks4://foobar:1080"
使用SOCKS v4代理"foobar:1080"加载所有URL。
--proxy-server="socks5://foobar:66"
使用SOCKS v5代理"foobar:66"加载所有URL。
还可以通过添加前缀为不同的URL类型指定单独的代理服务器, 带有URL说明符的代理服务器:
--proxy-server="https=proxy1:80;http=socks4://baz:1080"
使用HTTP代理"proxy1:80"加载 https://* , 使用SOCKS v4代理"baz:1080"加载所有 http://* 。
--no-proxy-server
禁用代理服务器
--proxy-auto-detect
自动检测代理配置
--proxy-pac-url=URL
指定代理自动配置URL
如果代理请求授权将会触发事件 "浏览器请求用户身份验证" 。 如果参数 "是否为代理服务器" 为真, 则使用参数 "认证回调" 接口的提交方法提供身份验证信息。
Javascript 绑定
水星浏览器提供了两个Javascript内置方法以支持Javascript与浏览器的交互访问。
cefQuery
内置 javascript 方法 cefQuery 用于供 javascript 脚本向浏览器发起查询。命令的使用方法:
function shoutBrowser(){
//向浏览器发起查询请求
(function(){
window.cefQuery(
request: "请求内容, 只能为string 类型",
persistent: false, /*是否持久化*/
onSuccess: function(response) {
//回调接口, 浏览器已接受查询。
alert(response); //浏览器回复数据仍然为string类型。
},
onFailure: function(code, msg){
//回调接口, 浏览器拒绝了查询请求。
//参数|code、|msg| 包含了拒绝原因。
alert("failed: "+code + " hint: " + msg);
}
);
})();
}
发起查询请求后, 浏览器会将请求传递至事件 "脚本收到查询" 。
参数 "请求" 是由javascript提供的查询信息。回复查询使用参数 "查询结果" 的接口方法: 查询结果.成功()
如果查询不被认可, 则应使用使用参数 "查询结果"的接口方法: 查询结果.失败() 进行回复。
cefQueryCancel
内置 javascript 方法 cefQueryCancel 用于取消已发起的查询。
查询被取消后将会触发浏览器事件 "脚本查询已取消"
请求
uri-data
uri-data请求用于数据加载不会进行网络访问。使用 uri-data 可以将任意文本、HTML、图像、多媒体等内容放入浏览器中呈现。
变量名 | 类 型 | 静态 | 数组 | 备 注 | 浏览器 | 水星浏览器 | | | 框架 | 水星框架 | | |
浏览器 = 水星铬浏览框1. 取浏览器 (hwnd )框架 = 浏览器. 取主框架 () 框架. 加载URL (取DataUri (到字节集 (“这是一个使用uri-data格式创建的HTML页面 ”), “text/html”)) |
取DataUri | 文本型 | | |
数据 | 字节集 | | | | mime_type | 文本型 | | | | 如果真 (取字节集长度 (数据 ) > 0 )base64 = BASE64编码 (数据, 取字节集长度 (数据 )) 返回 (“data:” + mime_type + “;base64,” + base64)
导航
导航请求用于浏览器跳转访问。
变量名 | 类 型 | 静态 | 数组 | 备 注 | 浏览器 | 水星浏览器 | | | 框架 | 水星框架 | | |
浏览器 = 水星铬浏览框1. 取浏览器 (hwnd )框架 = 浏览器. 取主框架 () 框架. 加载URL (“https://www.google.com/”)
正文
正文请求是比导航请求更复杂的请求, 作用同样用于浏览器跳转, 并可以支持设置请求方法(Method), 标头(HTTP-Header), 以及提交内容(PostData)等信息。
变量名 | 类 型 | 静态 | 数组 | 备 注 | 浏览器 | 水星浏览器 | | | 框架 | 水星框架 | | | 请求 | 水星请求 | | |
浏览器 = 水星铬浏览框1. 取浏览器 (hwnd )框架 = 浏览器. 取主框架 () 请求 = 创建请求 (“GET”, “https://www.chromium.org/”, “https://www.google.com”, , )框架. 加载请求 (请求 )
URL
url请求用于获取部分资源, 加载此请求浏览器不会产生跳转, 并且请求结果不会呈现至浏览器中。
变量名 | 类 型 | 静态 | 数组 | 备 注 | 浏览器 | 水星浏览器 | | | 框架 | 水星框架 | | | 请求 | 水星请求 | | | 请求结果 | 水星URL请求 | | |
浏览器 = 水星铬浏览框1. 取浏览器 (hwnd )框架 = 浏览器. 取主框架 () 请求 = 创建请求 (“GET”, “https://www.chromium.org/”, “https://www.google.com”, , )调试输出 (请求. 是否有效 ()) 请求. 置标志值 (位或 ( #请求标志 .跳过缓存, #请求标志 .允许存储证书, #请求标志 .不要重定向 )) 请求结果 = 框架. 发送URL请求 (请求, “”, “”)调试输出 (“URL请求结果: ”, 请求结果. 是否有效 (), 请求结果. 取请求状态 (), 请求结果. 取错误代码 ()) 如果真 (请求结果. 是否有效 ()) 调试输出 (“响应数据: ”, 请求结果. 取响应数据长度 (), 到文本 (请求结果. 取响应数据 ()) )
浏览器无关url
浏览器无关请求是指不经过浏览器而发送的请求。
变量名 | 类 型 | 静态 | 数组 | 备 注 | 请求 | 水星请求 | | | 请求结果 | 水星URL请求 | | |
请求 = 创建请求 (“GET”, “https://www.chromium.org/”, “https://www.google.com”, , ) 请求. 置标志值 (位或 ( #请求标志 .跳过缓存, #请求标志 .允许存储证书, #请求标志 .不要重定向 )) 请求结果 = 发送URL请求 (请求, , , )调试输出 (“浏览器无关URL请求结果: ”, 请求结果. 是否有效 (), 请求结果. 取请求状态 (), 请求结果. 取错误代码 ()) 如果真 (请求结果. 是否有效 ()) 调试输出 (“浏览器无关URL响应数据: ”, 请求结果. 取响应数据长度 (), 到文本 (请求结果. 取响应数据 ()) )
POST
post请求用于向url提交数据。
变量名 | 类 型 | 静态 | 数组 | 备 注 | 请求 | 水星请求 | | | 请求结果 | 水星URL请求 | | | 提交元素 | 水星提交元素 | | | 响应 | 水星响应 | | |
请求 = 创建请求 (“GET”, “http://127.0.0.1:19730/post-test”, , , )请求. 置方法 (“POST”) 请求. 置标头列表 ( #TEST_TEST_HEADER ) 提交元素 = 创建字节集提交元素 (到字节集 (“hello server!”)) 请求. 添加提交元素 (提交元素 ) 请求. 置标志值 (位或 ( #请求标志 .跳过缓存, #请求标志 .允许存储证书, #请求标志 .不要重定向 )) 请求结果 = 发送URL请求 (请求, , , )调试输出 (“URL请求状态: ”, 请求结果. 是否有效 (), 请求结果. 取请求状态 (), 请求结果. 取错误代码 ()) 如果真 (请求结果. 是否有效 ()) 调试输出 (“POST 响应数据: ”, 请求结果. 取响应数据长度 (), 到文本 (请求结果. 取响应数据 ()) )
对话框
在水星浏览器中有两种形式的对话框接口。提供文件选择器的文件对话框接口以及传递 javascript方法 alert、confrim、prompt的脚本对话框接口。
文件对话框
文件选择器对话框通常由 file 标签产生。用户点击了file标签后将会触发事件 "浏览器将要打开文件对话框"
如果希望向用户展示自定义文件对话框可以在此事件中返回真以替换系统对话框。
自动上传
通过编程方式向 file 元素标签提交选择文件。基于 Chrome 的安全策略限制使用 Javascript 访问文件元素标签会收到以下警告并导致访问无效。
File chooser dialog can only be shown with a user activation
一个解决的办法是通过向浏览器发送一个点击消息以激活 file 元素标签的显示功能, 代码如下。
变量名 | 类 型 | 静态 | 数组 | 备 注 | 浏览器 | 水星浏览器 | | | dom | 水星网页文档对象 | | | 元素 | 水星网页文档元素 | | | 元素边界 | 整数型 | | 0 | DEVICE_SCALE_FACTOR | 双精度小数型 | | | dpi | 整数型 | | | x | 整数型 | | | y | 整数型 | | | hDesktop | 整数型 | | | hDC | 整数型 | | |
浏览器 = 水星铬浏览框1. 取浏览器 (hwnd ) hDesktop = GetDesktopWindow ()hDC = GetDC (hDesktop )dpi = GetDeviceCaps (hDC, #LOGPIXELSY ) DEVICE_SCALE_FACTOR = 到数值 (dpi ) ÷ 100 dom = 浏览器. 取主框架 (). 取文档对象 () 元素 = dom. 查询元素 (“#avatar”)元素边界 = 元素. 取包围框 () x = 到整数 ( (元素边界 [1 ] + 元素边界 [3 ] ÷ 2 ) ÷ DEVICE_SCALE_FACTOR )y = 到整数 ( (元素边界 [2 ] + 元素边界 [4 ] ÷ 2 ) ÷ DEVICE_SCALE_FACTOR )浏览器. 鼠标移动 (x, y, 假, #事件标志 .NONE )浏览器. 鼠标点击 (x, y, #点击事件 .鼠标左键, 假, 1, #事件标志 .LEFT_MOUSE_BUTTON )浏览器. 鼠标点击 (x, y, #点击事件 .鼠标左键, 真, 1, #事件标志 .LEFT_MOUSE_BUTTON )
脚本对话框
脚本对话框是由 javascript 的 alert方法,confrim方法, prompt方法产生的对话框。 这些方法在浏览器中被调用后浏览器的 "浏览器脚本对话框将要打开" 事件。
事件的返回值决定了使用系统对话框还是使用自定义对话框。参数 "对话框类型" 指示了脚本对话框的类型, 参数 "消息内容" 和 "默认值" 分别提供了对应对话框类型的输入信息。如果希望使用自定义的对话框可参考以下情形:
网络
对于网络访问水星浏览器提供了丰富的处理时机。 浏览器导航时触发 "浏览器将要导航" 事件, 加载资源时触发 "浏览器将要加载资源" 事件, 重定向时触发 "浏览器资源重定向" 事件, 请求收到响应时触发 "浏览器资源请求收到响应" 事件, 资源加载完成时分别触发 "浏览器资源过滤器" 事件和 "浏览器资源加载完毕" 事件。 下面的通过几个应用场景来介绍这些事件的用法。
导航
导航是在浏览器加载新的URL时产生的事件, 如果希望阻止一些跳转链接的加载(例如, 广告, 弹出式页面等)可以在 "浏览器将要导航" 事件中完成。
|
_水星铬浏览框1_浏览器将要导航 | 逻辑型 | | |
浏览器 | 水星浏览器 | | | | 框架 | 水星框架 | | | | 请求 | 水星请求 | | | | 是否为用户手势 | 逻辑型 | | | | 是否重定向 | 逻辑型 | | | |
url = 请求. 取URL ()调试输出 (“浏览器将要导航”, url, 是否为用户手势, 是否重定向 ) 如果真 (寻找文本 (url, “www.w3school.com.cn/html5/index.asp”, , 假) ≠ -1 )返回 (真)
资源加载
想要关注浏览器的资源加载细节可在事件 "浏览器将要加载资源" 事件中进行。
参数 "浏览器" 和 "框架" 分别代表了资源请求的来源。 "请求" 参数则包含了该资源请求的详细信息, 允许被修改。事件返回值决定了资源请求的处置方式。一些典型的用例场景:
|
_水星铬浏览框1_浏览器将要加载资源 | 整数型 | | |
浏览器 | 水星浏览器 | | | | 框架 | 水星框架 | | | | 请求 | 水星请求 | | | |
url = 请求. 取URL ()调试输出 (“浏览器将要加载资源”, url ) 如果真 (寻找文本 (url, “www.w3school.com.cn/htmldom/index.asp”, , 假) ≠ -1 )请求. 置URL (“https://developer.mozilla.org/zh-CN/docs/Web/HTTP”) 如果真 (寻找文本 (url, “www.w3school.com.cn/js/index.asp”, , 假) ≠ -1 )调试输出 (“测试, 目标请求: ”, url, “已被拦截!!!”)返回 ( #资源请求 .立即取消 ) 返回 ( #资源请求 .立即通过 )
重定向
当某些资源响应(Response)告知浏览器需要前往另一个地址进行获取时会产生事件 "浏览器资源重定向"。
参数 "浏览器" 和 "框架" 是资源请求的来源。参数 "请求" 和 "响应" 包含了该资源请求的会话信息。 参数 "新地址" 为原响应(Response)告知浏览器更换访问的地址, 该地址可以被覆盖, 覆盖后浏览器将前往覆盖后的地址进行资源访问。
|
_水星铬浏览框1_浏览器资源重定向 | | | |
浏览器 | 水星浏览器 | | | | 框架 | 水星框架 | | | | 请求 | 水星请求 | | | | 响应 | 水星响应 | | | | 新地址 | 文本型 | | | | 调试输出 (“浏览器资源重定向”, 新地址 )如果真 (寻找文本 (新地址, “www.itwitch.cc/ecef”, , 假) ≠ -1 )新地址 = “https://www.google.com/”返回 ()
可选化资源过滤
可选化的资源内容过滤是指对资源内容进行检索过滤以及调整的过程, 资源过滤器对于于消除广告,和替换潜在不受欢迎的内容等很有帮助。在水星浏览器中通过事件 "浏览器资源过滤器" 和 "浏览器资源过滤器已就绪" 支持这项功能。
完成资源的可选化过滤需要先在 "浏览器资源过滤器" 事件中启用资源过滤器, 启用的方法是事件返回值。
启用资源过滤器后, 浏览器将会在资源加载完成后触发 "浏览器资源过滤器已就绪" 事件。在此事件中完成资源的可选化过滤设置。
|
_水星铬浏览框1_浏览器资源过滤器已就绪 | | | |
浏览器 | 水星浏览器 | | | | 过滤器 | 水星资源过滤器 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | url | 文本型 | | | 目标资源 | 字节集 | | | 替换资源 | 字节集 | | |
url = 过滤器. 取URL () 如果真 (寻找文本 (url, “”, , 假) ≠ -1 ) 目标资源 = 过滤器. 取资源 () 替换资源 = 读入文件 (资源路径 + “\ecef_runtime\tests\dom\smiley.gif”)如果真 (取字节集长度 (替换资源 ) > 0 ) 过滤器. 置资源 (替换资源, 取字节集长度 (替换资源 ))
参数 "过滤器" 提供了资源过滤器操作接口。通过接口方法 "过滤器.取资源()" 获取原始资源, 在完成内容过滤后再使用接口方法 "过滤器.置资源()" 以将过滤后的资源提交回浏览器。
偏好/首选项(Preference)
水星浏览器和 Google Chrome 一样支持用户偏好 / 首选项(Preference) 设置。如果你希望配置一些默认的偏好设置到浏览器中可以参考下面这些用法。
检索首选项
变量名 | 类 型 | 静态 | 数组 | 备 注 | 浏览器 | 水星浏览器 | | | 首选项信息 | 水星字典型 | | | 首选项名称数组 | 文本型 | | 0 | i | 整数型 | | | 类型 | 整数型 | | |
浏览器 = 水星铬浏览框1. 取浏览器 (hwnd )如果真 (浏览器. 是否有效 ()) 首选项信息 = 浏览器. 取所有首选项 (真) 首选项名称数组 = 首选项信息. 取所有键 ()调试输出 (首选项名称数组 ) 计次循环首 (取数组成员数 (首选项名称数组 ), i )类型 = 首选项信息. 取类型 (首选项名称数组 [i ])判断 (类型 = #值类型 .BOOL )调试输出 (“首选项: ”, i, 首选项名称数组 [i ], 首选项信息. 取逻辑型 (首选项名称数组 [i ])) 判断 (类型 = #值类型 .INT )调试输出 (“首选项: ”, i, 首选项名称数组 [i ], 首选项信息. 取整数型 (首选项名称数组 [i ])) 判断 (类型 = #值类型 .DOUBLE )调试输出 (“首选项: ”, i, 首选项名称数组 [i ], 首选项信息. 取双精度小数型 (首选项名称数组 [i ])) 判断 (类型 = #值类型 .STRING )调试输出 (“首选项: ”, i, 首选项名称数组 [i ], 首选项信息. 取文本型 (首选项名称数组 [i ])) 判断 (类型 = #值类型 .NULL )调试输出 (“首选项: ”, i, 首选项名称数组 [i ], “”)判断 (类型 = #值类型 .DICTIONARY )调试输出 (“首选项: ”, i, 首选项名称数组 [i ], “<字典值>”)判断 (类型 = #值类型 .LIST )调试输出 (“首选项: ”, i, 首选项名称数组 [i ], “<列表值>”)计次循环尾 ()
查找首选项
变量名 | 类 型 | 静态 | 数组 | 备 注 | 浏览器 | 水星浏览器 | | | i | 整数型 | | | 类型 | 整数型 | | | 通用值 | 水星通用型 | | |
浏览器 = 水星铬浏览框1. 取浏览器 (hwnd )如果真 (浏览器. 是否有效 ()) 如果真 (浏览器. 是否存在首选项 (“enable_referrers”)) 通用值 = 浏览器. 取首选项 (“enable_referrers”)调试输出 (通用值. 是否有效 (), 通用值. 取类型 (), 通用值. 取逻辑型 ())
设置首选项
设置用户偏好 / 首选项后当用户首次打开浏览器时将应用这些设置。关于首选项的详细信息可以查阅 Chromium 代码 pref_names.cc 中的介绍。
https://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/pref_names.cc?view=markup
下面是一些常见的首选项设置。
名称 |
描述 |
disable_screenshots |
禁用屏幕快照加速器和扩展程序API |
profile.ephemeral_mode |
如果设置为true, 则在临时模式下创建配置文件, 并且不存储其配置文件, 仅会在内存中使用 |
intl.charset_default |
设置网页中使用的默认字符编码, 缺少MIME字符集规范时 |
intl.accept_languages |
创建HTTP时用于Accept-Languages HTTP标头的值 |
intl.static_encodings |
显示用于不同语言环境的编码列表的值,语言环境它是从响应的字符串资源(即存储在资源包中的不可翻译部分) |
settings.labs.mediaplayer |
开启媒体播放器的逻辑值选项 |
settings.use_shared_proxies |
逻辑值选项, 用于控制是否从共享网络中获取代理设置 |
plugins.migrated_to_pepper_flash |
Pepper Flash已禁用, 如果希望在浏览器中重新使用, 则启用此首选项 |
plugins.allow_outdated |
逻辑值选项, 指示是否允许使用过时的插件 |
plugins.always_authorize |
逻辑值选项, 指示是否始终允许插件获取授权 |
profile.default_zoom_level |
默认的缩放级别 |
geolocation.enabled |
逻辑值选项, 是否启用地理位置信息 |
disable_3d_apis |
禁用3D API(WebGL, Pepper 3D) |
profile.default_content_settings |
适用于默认情况下的内容设置 |
enable_referrers |
是否启用发送来源(referrer)地址 |
enable_do_not_track |
是否发送DNT标头 |
gl_vendor_string |
GL_VENDOR字符串 |
gl_renderer_string |
GL_RENDERER字符串 |
gl_version_string |
GL_VERSION字符串 |
fullscreen.allowed |
确定用户是否可以进入全屏模式 |
extensions.disabled |
是否启用扩展程序 |
devtools.port_forwarding_enabled |
逻辑值选项, 指示是否应打启用端口转发 |
devtools.port_forwarding_default_set |
逻辑值选项, 指示是否已设置默认端口转发配置 |
devtools.port_forwarding_config |
用于端口转发的port->location字典对 |
devtools.remote_enabled |
指示是否启用远程开发工具调试 |
auth.allow_cross_origin_prompt |
逻辑值选项, 指示是否允许跨域子内容请求 |
device_status.location |
设备位置报告 |
browser.disk_cache_dir |
指示磁盘缓存存储位置的字符串 |
服务器
水星服务器类型提供小容量的 HTTP / Websocket 会话服务。
创建服务器
服务器创建成功后将会调用 "服务器启动就绪事件"
参数 "服务器" 代表了 HTTP-Server 角色, 提供会话功能接口。
对于 HTTP 请求服务器通过 "服务器收到请求" 事件提供处理时机。
|
_水星铬浏览框1_服务器收到请求 | | | |
服务器 | 水星服务器 | | | | 客户ID | 整数型 | | | | 客户地址 | 文本型 | | | | 请求 | 水星请求 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | url | 文本型 | | | 自定义响应内容 | 字节集 | | | 响应数据 | 字节集 | | |
url = 请求. 取URL ()调试输出 (“服务器收到请求”, 服务器. 取地址 (), 客户ID, 客户地址, url )判断 (寻找文本 (url, “/test-404-request”, , 假) ≠ -1 ) 服务器. 发送404响应 (客户ID ) 判断 (寻找文本 (url, “/test-500-request”, , 假) ≠ -1 ) 服务器. 发送500响应 (客户ID, “error info”) 判断 (寻找文本 (url, “/test-other-request”, , 假) ≠ -1 ) 自定义响应内容 = 到字节集 (“customize response return !!”)服务器. 发送自定义响应 (客户ID, 200, “text/html”, 取字节集长度 (自定义响应内容 ), #TEST_TEST_HEADER )服务器. 发送原始数据 (客户ID, 自定义响应内容, 取字节集长度 (自定义响应内容 )) 响应数据 = 到字节集 (“200 response!!!”)服务器. 发送200响应 (客户ID, “text/html”, 响应数据, 取字节集长度 (响应数据 ))
如果客户请求了 WebSocket(网页套接字) 连接服务器会将连接请求传递至 "服务器收到套接字请求" 事件交由宿主程序来决定接受或是取消连接。
接受客户连接事件 "服务器套接字已连接" 将会被调用, 在此事件中构建连接上下文, 之后服务器与客户的通讯将在 "服务器收到套接字消息" 事件中进行。
|
_水星铬浏览框1_服务器收到套接字消息 | | | |
服务器 | 水星服务器 | | | | 客户ID | 整数型 | | | | 消息内容 | 字节集 | | | | 消息长度 | 整数型 | | | | 调试输出 (“服务器收到套接字消息”, 服务器. 取地址 (), 到文本 (消息内容 ), 消息长度 ) 自定义数据 = 到字节集 (“hello client!!!”)服务器. 发送套接字消息 (客户ID, 自定义数据, 取字节集长度 (自定义数据 ))
网页套接字(WebSocket)
网页套接字类型提供了用于创建和管理 Websocket 连接以及通过该连接发送和接收数据的API接口。
使用 创建网页套接字() 方法来创建一个 Websocket。
套接字 = 创建网页套接字 ()如果真 (套接字. 是否有效 () = 假)调试输出 (“创建网页套接字失败!!!”)按钮_连接.禁止 = 假 返回 ()
发起连接
按钮_连接.禁止 = 真 套接字 = 创建网页套接字 ()如果真 (套接字. 是否有效 () = 假)调试输出 (“创建网页套接字失败!!!”)按钮_连接.禁止 = 假 返回 () 套接字. 连接 (“ws://127.0.0.1:9797/test-ws-conn”)
如果连接被服务器接受事件 "网页套接字连接成功" 将会被调用。
发送数据
如果真 (套接字. 是否有效 () 且 套接字. 连接是否有效 ()) 自定义数据 = 到字节集 (“hello server!!!!”)套接字. 发送 ( #套接字流类型 .字符串, 自定义数据, 取字节集长度 (自定义数据 ))
收到数据
关闭连接
如果真 (套接字. 是否有效 () 且 套接字. 连接是否有效 ()) 套接字. 关闭 ()
[/e]
|