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

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

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

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 @金满斗 :

好的, 我去看看,谢谢

登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...