先上代码:
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以后,并没有得到返回的值,值是空的。结果如下:
不报错也没有结果。alert也不弹。说明js并没有执行。其间换用web.form,运行js时报错,说是return在代码之外。
然后在大神提示下,有了js2脚本,执行后有返回值并成功接收。
它实际上是用匿名函数,再加上闭包自动执行,得到结果。
那么,不用闭包,就是事先定义好的函数行不行呢,于是有了js3。测试结果也是成功的:
分析三种结果。可以得知:
js脚本执行,并不能直接返回。只有函数才有返回值。也就是return必须放在函数中。
那么,只要构造一个js函数,然后执行,就能得到结果。第二个是利用闭包执行,第三个则是直接执行。都是可以的。
评论 (0)