diff --git a/javascript_methods.md b/javascript_methods.md index 170503a..0eb4cad 100644 --- a/javascript_methods.md +++ b/javascript_methods.md @@ -83,16 +83,36 @@ console.log(native.env) - `.set_status(stat = 0)`, 0为隐藏, 1为显示, 2为显示attention状态 -### `opener` 父级窗口对象 【0.5.0新增】 -> 指的是应用的父级窗口对象(`Gtk.Window`)。 +### `opener` 父窗口对象 【0.5.0新增】 +> 指的是应用的父窗口对象(`Gtk.Window`)。 -- `.postMessage(data)` 向父级窗口发送数据 - > 父级窗口, 可以通过`window.addEventListener('message', callback)`接收子窗口发送的数据。 没有父级窗口时, 则会指向当前窗口。 +- `.postMessage(data)` 向父窗口发送数据 + > 父窗口, 可以通过`window.addEventListener('message', callback)`接收子窗口发送的数据, 父窗口可使用`ev.source.postMessage()` 向该子窗口发送消息【0.6.0新增】。 没有父窗口时, 则会指向当前窗口。 + +```js +// 父窗口 +window.addEventListener('message', ev => { + console.log(ev.uuid) // 若有uuid, 则说明这条消息是从子窗口发来的。 否则为 父窗口或自身发来的。 + + // 可以向消息来源的窗口发送回执消息 (要注意, 若没有 ev.uuid 时, 谨慎调用, 否则会一直死循环的) + // 这是 0.6.0新增的支持功能 + ev.source.postMessage('已收到') +}) + +// 子窗口 +native.opener.postMessage('我是来自子窗口的消息') +``` + +### `children` 子窗口对象 【0.6.0新增】 +- `.postMessage(data, uuid = null)` 向子窗口发送数据, uuid为子窗口的uuid, 可不传 + > 向子窗口发送消息, 若不传子窗口的uuid时, 则会向所有的子窗口同时发送消息。若没有子窗口时, 会发送到当前窗口。 ### `window` 窗口对象 指的是应用的窗口对象(`Gtk.Window`)。 +- `uuid` 窗口唯一标识。 只是给你看的, 没啥用。【0.6.0新增】 + - `.create(options = {})` 创建新窗口, 对比window.open(), 这里创建的窗口, 提供更多高级的配置项。 > 【0.5.0新增】 options 结构如下 > - url`` , 这个不多说了 @@ -105,6 +125,9 @@ console.log(native.env) > - y`` , 窗口打开时, 位于显示器的纵坐标 > - always_on_top`` ,打开的窗口, 保持一直在最上层。 > - resizable`` , 窗口是否允许调整大小(这个在不同的桌面环境下, 不一定生效) + > - icon`` , 【0.6.0新增】图标名称, `Linux`专用, 只传图标名即可, 会自动读取主题中的图标(如果存在的话) + > - icon_path`` , 【0.6.0新增】图标文件的绝对路径, 1:1大小, png格式。 + > - uuid`` , 【0.6.0新增】新建窗口的uuid, 不可重复, 否则发送消息只有第1个能收到, 不传则随机生成值。 - `.close()` 当前当前窗口, 效果等同于JS的原生方法 `window.close()`。 这里仅用于以防万一`window.close()`无响应时, 可改用本方法关闭。