用Javascript 实现网页的消息循环?

用Javascript 实现消息类似window的循环可行吗?

应用例子:例如在网页实现接收串口数据。

如果用winform程序很容易实现这种应用,可是在网页上实现,真是麻烦。一度曾想用VBScript来实现,但VBScript总认人觉得不爽,迟早被淘汰的东西,MS自己都抛弃的东西还是不要用了。所以还是选用javascript来实现,至少网页可以方便的布署和通用性更强一些。

javascript实现消息循环,不是一件简单的事情,至少我从来没有搞过,也不知道可不可行?

 

于是通过setInterval函数实现延时和循环,从而达到模拟消息循环的效果。

例如通过这一事件达到网页定时触某些动作。

以下为实现模拟消息循环函数

 

/*参数说明
* runString : 字符串型,需要重复执行的Javascript函数或语句(多个函数或语句请用;分隔)
* stopString : 字符串型,用于中止重复执行动作(stopString)的Javascript函数或语句
* delayTime : 数字型,重复执行的时间间隔(毫秒数)
*/
function lLoopRun(runString,stopString,delayTime)
{
  var vintervalId = null;
  this._doLoop = function ()
  {
    if (vintervalId && !eval(stopString)){ //如果不停,那么一直执行runString函数
      eval(runString);
    }
    else { //已经结束循环
      window.clearInterval(vintervalId);
      vintervalId = null;
    }
    document.getElementById("TCount").innerHTML = countTimer;//输出执行次数//为便于测试,应用时就将此行注释掉
  }
  window.clearInterval(vintervalId);
  vintervalId = window.setInterval(this._doLoop,delayTime);
}

 

调用例子

  //数据通过ActivX从仪器串口读取至B/S平台端,

 //提交自动上传
  function doUploadBus()
  {

     //串口基础参数传递及参数设置

      ...

     

      //实现模拟消息循环
      lLoopRun("startGetResult();","stopGetResult();",waitTime);
   }

 

 

/以下为我应用的例子。可供参考

 

  //全局变量
  var countTimer=0;//控制等待时间记数器
  var lstCheckData ="";//接收检测结果变量 

 

 //获取串口结果数据
   function startGetResult(){
        countTimer++;//计时器
        lstCheckData=PRCommCheckBus.GetDYResult().replace(/(^/s*)|(/s*$)/g,"");//从串口中读取数据
    }
   
    //循环结束
    function stopGetResult(){
        if (countTimer==0){
          return false;
        }
        if(lstCheckData=="NO")//ActiveX内部抛出数据还没有读完的消息代码,继续循环
        {
            document.all.btnUpload.disabled=true;//页面按钮设置为灰色不可用(document.all为IE的写法如果需要其他浏览器更改为其他方法即可)
            return false;
        }
        if (lstCheckData=="0"){ //内部没有数据时
            alert("暂无数据");
            location.href=location.href;
            return false;
        }
     if (lstCheckData=="-1"||lstCheckData=="-2")//在ActiveX内部抛出异常数据代码
       {
         document.all.btnUpload.disabled=false;//按钮设置为可用
         return true;
       }
       if(lstCheckData!="")//如果已经完全接收了。
       {
           SetProtClose();
           document.getElementById("lblRes").innerHTML = lstCheckData;//显示在textArea
           document.all.btnUpload.disabled=true;
           return true;
        }
       /*else if(countTimer>1200)//总超时
        {
          alert("已经超时");
          document.URL=location.href;
          document.all.btnUpload.disabled=false;
          tag=true;
       }*/
     }
    
    function SetProtClose()//关闭串口
    {
       PRCommCheckBus.ClosePort();//关闭串口.  PRCommCheckBus为ActiveX组件的ID
    }

 

 

通过上面的代码我们可以实现在HTML与 ActiveX通信功能

 

即不用通过动态页面脚本如ASP、JSP、PHP。即可实现强大ActiveX的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值