对象 WebView

浏览器窗口对象

WebView 是一个嵌入浏览器的窗口组件,目前仅支持 windows ie。

由于 WebView 内的 JavaScript 程序与 fibjs 并不在同一个引擎内,所以如果需要与宿主程序进行通讯,需要通过消息进行。

WebView 用于通讯的对象是 external,external 支持两个方法 postMessage, close 和一个事件 onmessage。

一个简单的通讯示例代码如下:

// index.js
var gui = require('gui');
var webview = gui.open('fs:index.html');

webview.onmessage = function(msg) {
    console.log(msg);
}

webview.postMessage("hello from fibjs");

webview.wait();

index.html 的内容如下:

<script>
    external.onmessage = function(msg){
        external.postMessage("send back: " + msg);
    };
</script>

在 html 中,有一个特殊的消息 "close",在用户窗口关闭之前,会向 html 内发送此消息。onmessage 收到此消息后,可以决定是否关闭。如果 onmessage 返回 false,则此次操作取消,否则将关闭窗口。

以下的例子,会在用户点关闭后等待 5 秒后再关闭窗口。

<script lang="JavaScript">
    var bClose = false;
    external.onmessage = function (m) {
        if (m == 'close' && !bClose) {
            setTimeout(function () {
                bClose = true;
                external.close();
            }, 5000);
            return false;
        }
    }
</script>

上面的代码中,因为 external.close 本身也会触发 "close" 事件,所以需要增加一个开关变量,用于识别是否需要处理此次事件。

继承关系

静态属性

defaultMaxListeners

Integer, 默认全局最大监听器数

static Integer WebView.defaultMaxListeners;

成员属性

visible

Boolean, 查询和设置窗口是否显示

Boolean WebView.visible;

onload

Function, 查询和绑定加载成功事件,相当于 on("load", func);

Function WebView.onload;

onmove

Function, 查询和绑定窗口移动事件,相当于 on("move", func);

Function WebView.onmove;

以下示例会在窗口移动时输出窗口的左上角坐标:

var gui = require('gui');
var webview = gui.open('fs:index.html');

webview.onmove = function(evt) {
    console.log(evt.left, evt.top);
}

onresize

Function, 查询和绑定窗口尺寸改变事件,相当于 on("size", func);

Function WebView.onresize;

以下示例会在窗口改变大小时输出窗口的尺寸:

var gui = require('gui');
var webview = gui.open('fs:index.html');

webview.onresize = function(evt) {
    console.log(evt.width, evt.height);
}

onclosed

Function, 查询和绑定窗口关闭事件,WebView 关闭后会触发此时间,相当于 on("closed", func);

Function WebView.onclosed;

onmessage

Function, 查询和绑定接受 webview 内 postMessage 消息事件,相当于 on("message", func);

Function WebView.onmessage;

成员函数

setHtml

设置 webview 的页面 html

WebView.setHtml(String html) async;

调用参数:


print

打印当前窗口文档

WebView.print(Integer mode = 1) async;

调用参数:


close

关闭当前窗口

WebView.close() async;

wait

等待当前窗口关闭

WebView.wait() async;

宿主程序在创建窗口后,需要进入等待,否则随着宿主程序的退出,窗口将自动关闭。同时 wait 的调用也并不是必须的,你可以在打开窗口后处理其它业务,只需要保证程序不会自行退出即可。


postMessage

向 webview 内发送消息

WebView.postMessage(String msg) async;

调用参数:


on

绑定一个事件处理函数到对象

Object WebView.on(String ev,
    Function func);

调用参数:

返回结果:


绑定一个事件处理函数到对象

Object WebView.on(Object map);

调用参数:

返回结果:


addListener

绑定一个事件处理函数到对象

Object WebView.addListener(String ev,
    Function func);

调用参数:

返回结果:


绑定一个事件处理函数到对象

Object WebView.addListener(Object map);

调用参数:

返回结果:


prependListener

绑定一个事件处理函数到对象起始

Object WebView.prependListener(String ev,
    Function func);

调用参数:

返回结果:


绑定一个事件处理函数到对象起始

Object WebView.prependListener(Object map);

调用参数:

返回结果:


once

绑定一个一次性事件处理函数到对象,一次性处理函数只会触发一次

Object WebView.once(String ev,
    Function func);

调用参数:

返回结果:


绑定一个一次性事件处理函数到对象,一次性处理函数只会触发一次

Object WebView.once(Object map);

调用参数:

返回结果:


prependOnceListener

绑定一个事件处理函数到对象起始

Object WebView.prependOnceListener(String ev,
    Function func);

调用参数:

返回结果:


绑定一个事件处理函数到对象起始

Object WebView.prependOnceListener(Object map);

调用参数:

返回结果:


off

从对象处理队列中取消指定函数

Object WebView.off(String ev,
    Function func);

调用参数:

返回结果:


取消对象处理队列中的全部函数

Object WebView.off(String ev);

调用参数:

返回结果:


从对象处理队列中取消指定函数

Object WebView.off(Object map);

调用参数:

返回结果:


removeListener

从对象处理队列中取消指定函数

Object WebView.removeListener(String ev,
    Function func);

调用参数:

返回结果:


取消对象处理队列中的全部函数

Object WebView.removeListener(String ev);

调用参数:

返回结果:


从对象处理队列中取消指定函数

Object WebView.removeListener(Object map);

调用参数:

返回结果:


removeAllListeners

从对象处理队列中取消所有事件的所有监听器, 如果指定事件,则移除指定事件的所有监听器。

Object WebView.removeAllListeners(Array evs = []);

调用参数:

返回结果:


setMaxListeners

监听器的默认限制的数量,仅用于兼容

WebView.setMaxListeners(Integer n);

调用参数:


getMaxListeners

获取监听器的默认限制的数量,仅用于兼容

Integer WebView.getMaxListeners();

返回结果:


listeners

查询对象指定事件的监听器数组

Array WebView.listeners(String ev);

调用参数:

返回结果:


listenerCount

查询对象指定事件的监听器数量

Integer WebView.listenerCount(String ev);

调用参数:

返回结果:


eventNames

查询监听器事件名称

Array WebView.eventNames();

返回结果:


emit

主动触发一个事件

Boolean WebView.emit(String ev,
    ...);

调用参数:

返回结果:


dispose

强制回收对象,调用此方法后,对象资源将立即释放

WebView.dispose();

equals

比较当前对象与给定的对象是否相等

Boolean WebView.equals(object expected);

调用参数:

返回结果:


toString

返回对象的字符串表示,一般返回 "[Native Object]",对象可以根据自己的特性重新实现

String WebView.toString();

返回结果:


toJSON

返回对象的 JSON 格式表示,一般返回对象定义的可读属性集合

Value WebView.toJSON(String key = "");

调用参数:

返回结果:


valueOf

返回对象本身的数值

Value WebView.valueOf();

返回结果: