工作中需要用到aardio内嵌electron浏览框,
electron浏览框里加载本地的html,
html里使用webview浏览第三方网站。
现在遇到的问题是,
本地的html里可以自己添加与aardio交互的接口,
而webview里加载浏览的第三方网站没法自己向里面添加js,
只能向里面注入js执行,
那么如何获取js执行后的返回值?
经过各种摸索测试,
找到了一个比较简单的办法,
在本地html里加一个有回调的接口函数就可以了。
webview.executeJavaScript(js) 默认是没有返回值的,
可以给它加个 then ,让它执行完成后把结果作为参数返回到回调函数,
然后在回调函数里调用aardio的接口函数来与aardio的主窗口交互。
关键源码如下:
//1.先启动主进程的网页app.html = /** ... **/ 里加一个给webview内网页注入JS后有回调的函数
aardio.on("executeJavaScriptAndReturn",(js)=>{
//注入JS脚本到打开的远程网页,并回调
webview.executeJavaScript(js).then(function (a) {
alert(a);
aardio.$AARprint(a);
});
})
//2.app.external = { } 接口里加一个函数处理回调
$AARprint = function($,str){
winform.editLog.print(str);
}
//3.按钮里调用注入JS后有回调的函数
winform.button.oncommand = function(id,event){
//成功
var jsStr = /*
//要封装成函数调用执行或用封装成匿名函数立即执行才能获取到return的值
function test(){
var txt = document.querySelector("#kw").value;
if(txt.length>5){
return "大于5";
}else {
return "小于等于5";
}
}
test();
*/
var jsStr2 = /*
//要封装成函数调用执行或用封装成匿名函数立即执行才能获取到return的值
(function(){
var txt = document.querySelector("#kw").value;
if(txt.length>5){
return "大于5";
}else {
return "小于等于5";
}
}());
*/
app.xcall($,"executeJavaScriptAndReturn",jsStr);
app.xcall($,"executeJavaScriptAndReturn",jsStr2);
}