aardio中web.view执行js脚本后接收返回值的测试

aardio中web.view执行js脚本后接收返回值的测试

老马来啦
2023-02-23 / 0 评论 / 正在检测是否收录...

先上代码:

import win.ui;
/*DSG{{*/
mainForm = win.form(text="WebView2控件截图";right=959;bottom=591)
mainForm.add(
button={cls="button";text="Button";left=192;top=492;right=350;bottom=557;z=2};
custom={cls="custom";text="自定义控件";left=24;top=29;right=802;bottom=431;z=1};
edit={cls="edit";text="Edit";left=473;top=495;right=700;bottom=568;edge=1;multiline=1;z=3}
)
/*}}*/

import web.view
var wb=web.view(mainForm.custom);
wb.go("http://www.baidu.com")

mainForm.button.oncommand = function(id,event){
    var js1=`var a=123;alert(a);return a;`;    
    var js2=`(function(){let a=500;alert(a);return a;})()`;    
    var js3=`function test(){var a=123;alert(a);return a;};test();`;    
    //var result=wb.eval(js);
    wb.doScript(js1,function(result){
        mainForm.edit.print(result);
        win.msgbox(result);
    } )
    
}

mainForm.show();
return win.loopMessage();

运行js1以后,并没有得到返回的值,值是空的。结果如下:
1.jpg
不报错也没有结果。alert也不弹。说明js并没有执行。其间换用web.form,运行js时报错,说是return在代码之外。
然后在大神提示下,有了js2脚本,执行后有返回值并成功接收。
2.jpg
它实际上是用匿名函数,再加上闭包自动执行,得到结果。
那么,不用闭包,就是事先定义好的函数行不行呢,于是有了js3。测试结果也是成功的:
3.jpg
分析三种结果。可以得知:

js脚本执行,并不能直接返回。只有函数才有返回值。也就是return必须放在函数中。
那么,只要构造一个js函数,然后执行,就能得到结果。第二个是利用闭包执行,第三个则是直接执行。都是可以的。

0

评论 (0)

取消