aardio 文档
aardio 范例: WebView2 - 调用 JS 函数
//调用 JS 函数
import win.ui;
/*DSG{{*/
var winform = win.form(text="WebView2 - 调用 JS 函数";right=966;bottom=622)
winform.add(
btnCallJavaScript={cls="button";text="调用 JS 函数";left=615;top=537;right=869;bottom=606;color=14120960;db=1;dr=1;font=LOGFONT(h=-14);note="在 aardio 中调用 JavaScript 函数。";z=2};
static={cls="static";left=8;top=6;right=956;bottom=503;db=1;dl=1;dr=1;dt=1;z=1}
)
/*}}*/
import web.view;
var wb = web.view(winform.static);
wb.html = /**
<!DOCTYPE html><html>
<head>
<meta charset="utf-8" />
<script>!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e=e||self).mitt=n()}(this,function(){return function(e){return{all:e=e||new Map,on:function(n,t){var f=e.get(n);f?f.push(t):e.set(n,[t])},off:function(n,t){var f=e.get(n);f&&(t?f.splice(f.indexOf(t)>>>0,1):e.set(n,[]))},emit:function(n,t){var f=e.get(n);f&&f.slice().map(function(e){e(t)}),(f=e.get("*"))&&f.slice().map(function(e){e(n,t)})}}}});
emitter = mitt();//github.com/developit/mitt </script>
</head>
<body>
<script>
//响应事件
emitter.on("setData", function(v){
document.body.insertAdjacentHTML("beforeEnd", JSON.stringify(v) + "<br>" )
} );
//定义全局函数
window.setData = function(v){
document.body.insertAdjacentHTML("beforeEnd", JSON.stringify(v) + "<br>" )
}
</script>
</body>
**/
// aardio 按钮事件
winform.btnCallJavaScript.oncommand = function(id,event){
/*
注意 wb.invoke, wb.doScript 都是非阻塞异步调用 JS。
但 wb.eval, wb.xcall 都会阻塞等待 JS 返回值。
在被网页回调的 aardio 函数内部调用 wb.eval, wb.xcall 可能阻塞后续调用。
应改用非阻塞的 wb.invoke, wb.doScript 。
或者通过 winform.setTimeout 异步调用 wb.invoke, wb.doScript。
*/
/*
调用 JS 全局函数,参数 @1 指定函数名,
可传任意个数参数(参数用 JSON 转换为纯 JS 对象)。
*/
wb.xcall("setData",{
name = "测试1";
passowrd = "123456"
});
/*
调用 JS 全局对象的成员函数。
如果参数@1 不包含回车、换行、分号、大括号,圆括号,
则最后一个点号前的对象设为被调用函数的 this 参数。
*/
wb.xcall("emitter.emit",
"setData",{
name = "测试2";
passowrd = "123456"
});
//参数 @1 可以指定返回函数对象的 JS 表达式。
wb.xcall("function(args){
emitter.emit('setData',args)
}", {
name = "测试3";
passowrd = "123456"
});
}
winform.show();
win.loopMessage();
Markdown 格式