当前位置:天尊娱乐 > 客户案例 >

天尊娱乐在服务端(Page.Write)调用自定义的JS方法详

作者:卷耳 发布时间:2018-12-07 10:02
  
var loadComplete = false;  
function LoadCompleted()  
{  
loadComplete= true;  
}  
window.attachEvent("onload",LoadCompleted);  
  
呵呵,这样我们只要通过判断loadComplete来取得页面是否载入完毕了。

  
代码如下:

  
var mImgdir = "";  
var mCaption = "caption";  
var mMsg = "Message";  
var mOkClick= null;  
function ShowMessage(imgdir,caption,msg,OkClick)  
{  
if(loadComplete)  
{  
KMessageBox.ShowInfo(mImgdir,mCaption,mMsg,mOkClick);  
}  
}  
  
这样子在loadComplete未false的情况下,我们就不会去执行KMessageBox.ShowInfo()方法,只然就不会出现JS错误提示了。

  
单单这样子,还不行,因为输出的这样的脚本,IE只在输出页面的时候执行了一次,但是此时loadComplete=false,所以,我们需要定时检测页面是否载入完毕。说到定时,只然是祭出setTimeout & setInterval. 我们这里需要不停的检测,故使用setInterval方法。最终代码如下:  
代码如下:

  
var loadComplete = false;  
var mImgdir = "";  
var mCaption = "caption";  
var mMsg = "Message";  
var mOkClick= null;  
var timerID;  
function ShowMessage(imgdir,caption,msg,OkClick)  
{  
if(loadComplete)  
{  
KMessageBox.ShowInfo(mImgdir,mCaption,mMsg,mOkClick);  
//卸载此事件 window.detachEvent("onload",function(){LoadCompleted;}); //停止定时触发  
window.clearInterval(timerID);  
}  
}  
function LoadCompleted() { loadComplete=true; }  
window.attachEvent("onload",LoadCompleted);  
//设置定时检测机制  
timerID = window.setInterval(ShowMessage,1);  
  
当然以上代码只兼容IE,因为使用attachEvent 和 detachEvent,至于让他兼容其他浏览器可以参看[JavaScript]自定义Title的显示方式一文中的处理方式:  
代码如下:
  
if(!document.attachEvent)//Not IE  
{  
document.attachEvent = function(){document.addEventListener(arguments[0].substr(2),arguments[1],arguments[2])}  
}  
if(!window.attachEvent)//Not IE  
{  
window.attachEvent = function(){window.addEventListener(arguments[0].substr(2),arguments[1],arguments[2])}  
}  
  
在服务端,只要StringBuilder出以上的脚本,然后Write出来就可以了。上面也只是提供了一种思路,当然还会有其他的办法,比如我不适用定时检测,我直接挂载到windows.onload里面,让页面自动监听,自动执行,也未尝不可:),正所谓条条大路通罗马嘛~~~~~  
以上思路来自yui,并且yui实现了一个更漂亮的自定义MessageBox,有兴趣的朋友可以共同研究下。

(责任编辑:admin)

TOP