aardio 文档
aardio 范例: 主进程通信
//主进程通信
//请改用微软的 WebView2(也就是 aardio 标准库里的 web.view )
import electron.app;
var app = electron.app( ,,true);// 如果第3个参数为true,可以查看js主进程里的console.log输出
/*
electron是多进程运行环境,
显示网页的叫渲染进程(类似浏览器环境)而启动electron的main.js则称为主进程,
主进程、渲染进程与aardio交互的方法是一样的(不一样的麻烦地方我给大家处理好了),
在js中aardio = require('aardio') 导入aardio接口就可以与aardio交互了。。
*/
app.jsMain =/**
const aardio = require('aardio') //启动RPC服务允许调aardio/electron互调函数,创建BrowserWindow主窗口
const app = require('electron').app //管理electron进程的生命周期
/*
aardio-electron 主进程已准备就绪,主窗口已创建触发此事件,
*/
aardio.ready( win=> {
console.log("abc已创建窗口");
// 参数win是BrowserWindow对象
//if( !aardio.studioInvoke ){
win.setMenu( null )
//}
win.on('closed', () => {
})
} )
// 可以继续注册其他导出给aardio的回调函数
aardio.on('main.hello', (str) => {
// 可以在JS里调用winapi函数
aardio.MessageBox(
aardio.hwndElectron,
"electron调用winapi测试",
"electron",0
);
return "electron主进程应答" + str;
})
app.on('window-all-closed', () => {
app.quit();
})
**/
//可选在这里直接指定index.js的代码,实际开发请写到工程文件里
app.html = /**
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>aardio嵌入electron演示</title>
<script>
const aardio = require('aardio') //这句用来导入aardio支持模块
</script>
</head>
<body>
<h2 onmousedown="aardio.hitCaption();return false;"
style="-webkit-user-select: none;cursor:default;">按这里调用aardio.hitCaption()拖动窗口!</h2>
<button onclick="aardio.quit();">点这里调用aardio关闭窗口</button>
</html>
**/
/*
在下面的external对象中指定允许electron渲染进程中使用JS直接调用的函数
下面的external 会直接转换为js中的aardio对象,在JS中require('aardio')就可以使用
*/
app.external = {
MessageBox = ::User32.MessageBox;
}
/*
接收返回值,服务端为什么要用这种格式接收返回值呢?
当然这不是因为electron的原因,而是作为一个WebSocket服务端,他可能会有较多连接,
如果每个连接都注册回调函数,如果连接丢失的话,可能就会不必要的浪费时间去回收,
所以统一用一个同名的回调函数,hSocket,函数名,以及RPC本身参数中附带的信息都可以区分消息来源。
这样可以避免创建大量重复的回调函数,客户端我们把方便放第一位,而服务端要稍加考虑性能的问题。
*/
app.callback("main.hello",function(hSocket,result,err){
win.msgbox(result : err,"调用electron主进程的main.add函数以后返回值了");
})
//electron窗口准备就绪会触发这个函数
app.onReady = function(hwndElectron){
app.xcall("main.hello","aardio");
}
//WebSocke/RPC中遇到的错误都会触发这个函数,可以在这里自定义错误处理方式
app.ws.onError = function(hSocket,err){
errput(err,"electron/rpc error");//当然也可以在 global.onError 里自定义全部的错误信息怎么显示
}
//正式的启动electron进程,并打开主页
app.start("/res/main.aardio");
win.loopMessage();
Markdown 格式