(转)miniblink跨线程异步JS回调,及miniblink提升首屏加载速度的代码

By admin at 2019-03-26 • 0人收藏 • 908人看过

转自:aardio培训群 , 感谢 Jacen He 校长提供代码

miniblink 不能回调JS确实非常麻烦,

因为用web做界面,很自然的会调用耗时操作,不能回调逻辑会变的很复杂。


针对这个aardio封装了一个函数,可以非常方便的弥补这个问题

import win.ui;
/*DSG{{*/
var winform = win.form(text="跨线程JS回调";right=759;bottom=469)
winform.add()
/*}}*/

import web.blink.form; //导入miniblink支持库
var mb= web.blink.form(winform); //创建miniblink浏览器窗口

//定义网页脚本可调用的本地函数
mb.external = { 
    aardioCall = function(callback){ 
        
        /*
        JS调用aardio函数且返回以后,参数中的JS对象将被释放。
        所以我们需要用下面的代码封装并保存JS回调函数,
        并由aardio负责在不需要时自动回收该函数。
        */
        winform.jsCallback = mb.jsSaveCallback(callback);
        
        //创建线程
        thread.invoke( 
            function(winform){
                sleep(1000);
                
                /*
                这时候对external.aardioCall()的调用已经结束,
                但winform.jsCallback仍然可以正常使用,另外因为
                已存为窗体的成员函数,也支持跨线程调用。
                */
                winform.jsCallback("hello");
            },winform
        )
    };
}
 

mb.html = /** 
<body style="margin:27px;">  
        <br><a href='javascript:
            external.aardioCall(
                function(str){
                    alert(str);
                }
                
            );
        '>调用aardio函数,然后异步回调参数中传过去的JS函数</a> 
    </div>
**/ 

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

mb在回调中堵塞都不合适,所以先让他返回,用这个方法,JS代码里感受不到复杂度


mb提升首屏加载速度的代码:

for(i=1;10;1){
    win.peekPumpMessage(,,0x113/*_WM_TIMER*/,0x113/*_WM_TIMER*/)
    sleep(50);
}
mainForm.show();


9 个回复 | 最后更新于 2019-04-22
2019-03-27   #1

运行提示 jsSaveCallback null,已更新最新版本 21.58

2019-03-27   #2

回复#1 @guaiguaiyu :

web.blink更新到最新就没这个错误了.  aardio的ide更新到最新, 并不是blink也更新到了最新, 需要在扩展库那里自己手动去更新到最新

2019-03-27   #3

回复#3 @guaiguaiyu :

更新之后, 测试可以传递多个参数

image.png

2019-03-27   #4

这个异步调用js , 其实很方便的用在很多地方,

mb.html = /** 
<!DOCTYPE html>
<html>

<head>
<script>
	external.aardioCall(
    	function(str){ alert(str); }
	);
</script>
</head>

<body>

<h1>My Web Page</h1>

</body>
</html>



**/

winform.button.oncommand = function(id,event){
	winform.jsCallback("哈哈")
}

这样, 在界面上增加按钮也可以直接操作这个js功能了/

2019-04-08   #5

回复#3 @admin :

升级了ok可以了。传参数可以了。

----------------------------------

接下来是一个很头疼的问题。

关于页面交互里面所有的方法都需要写到 mb.external = {  xxx} 里面,岂不是乱套,

未采用 跨线程异步JS回调 的时候我是将方法独立到类库,然后

mb.external = ..table.concat(mb.external,biz);

mb.external = ..table.concat(mb.external,biz.item);

concat的形式将方法整合到external里面,


想在这个基础上加上跨线程异步js回调,发现出问题了。

biz或者biz.item类里面,并没有 winform 和mb这可是头疼的问题啊,结果很头疼




2019-04-22   #6

龙泉扫地僧封装优化的miniblink,很不错.

2019-04-22   #7

回复#6 @金满斗 :

哪里有资料吗?

2019-04-22   #8

回复#7 @admin :

http://www.miniblink.net/ ,我在他群里,小版本跑的很勤.速度和有多地方比aardio里带的那个dll提升了很多.

2019-04-22   #9

回复#8 @金满斗 :

好的, 我去看看,谢谢

登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
纯私人站,当笔记本用的,学到哪写到哪,目前正在学aardio+halcon机器视觉.
本 站 主 站:Stm32cube中文网
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
aardio在线手册Aardio在线手册
黑猫Aar教程网:简码编程
C大Aardio论坛:Aar爱好者论坛
AARDIO语言QQ群:70517368
赞助商:才仁机械
下载站:非凡软件站
Loading...