如何在服务端(Page.Write)调用自定义的JS方法

2016-02-19 22:16 8 1 收藏

在这个颜值当道,屌丝闪边的时代,拼不过颜值拼内涵,只有知识丰富才能提升一个人的内在气质和修养,所谓人丑就要多学习,今天图老师给大家分享如何在服务端(Page.Write)调用自定义的JS方法,希望可以对大家能有小小的帮助。

【 tulaoshi.com - Web开发 】

  自从[javascript]自定义MessageBox一文发布以后,很多网友都来信询问,如何在服务端调用ShowInfo方法,周末休息想了个折中的办法来实现。

  首先,我们应该可以先明确,为什么我们用Page.Write把自定义的JS方法输出到页面上为什么IE不能识别,会出现“XXX未定义”的错误。原因很简单,因为我们用Page.Write输出的脚本是出现在页面的最顶端。IE读到是javascript函数的时候,就开始执行,但是此时我们link的js文件并未被IE读入,所以IE无法识别我们定义在js文件里面的方法。那write alert为什么可以呢?因为alert是IE内嵌的脚本功能函数,不管有没有页面,IE都认得它。 

  找到问题所在,自然就好解决了:

  1、把我们自定义的方法内嵌到IE里面。 --- 看起来有点异想天开,呵呵

  2、等页面载入完成后再触发事件。 ---触发事件,没错。 

  如何知道页面是否载入完成呢?

  1、通过document的状态

  2、通过事件触发(windows.onload) 

  第一种好像比较不保险,有时候明明已经全部载完了,它还是一直显示在传送数据(FF此情况最明显),所以还是用事件比较保险一点。 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  定义一个简单方法,挂载到windows.onload里面,执行的时候做一个标识 

var loadComplete = false;
function LoadCompleted()
{
loadComplete= true;
}
window.attachEvent("onload",LoadCompleted);

  呵呵,这样我们只要通过判断loadComplete来取得页面是否载入完毕了。 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

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,有兴趣的朋友可以共同研究下。

来源:http://www.tulaoshi.com/n/20160219/1628055.html

延伸阅读
标签: Web开发
今天在网上看到ASP.Net 2.0中注册自定义控件的好方法,记录如下。 在web.config 文件中全局注册自定义控件 system.web       pages         controls           add tagPrefix="rx" assembly="HYLQ.Component" ...
《死侍》自定义键位心得完美自定义键位 方式1: Q作为传送反击键,鼠标左键轻击,右键重击,中键开枪,E键瞄准放大,R重装和互动,ZXC分别对应键盘的轻枪重,其他不变。 鼠标左键轻击,右键重击,中键开枪,这个几乎没什么可说的。 ZXC的定义是不想占用其他键位,再就是方便看刚开始了解连招,也比较形象和对称,有时还可以用来释放动...
喝水时间自定义水量方法   喝水时间自定义水量方法。喝水时间是一款健康提醒类应用,主要帮助小伙伴养成健康饮水习惯。根据每个人的身体状况不同,喝水量也不同,可以根据需求自定义水量。要怎么自定义喝水量呢?接下来小编就教大家喝水时间自定义水量方法。 1)打开喝水时间进入应用,点击左上角,接着点击菜单栏。 ...
简洁记账自定义壁纸方法   简洁记账自定义壁纸方法。很多小伙伴知道简洁记账怎么更换壁纸,但是不知道怎么自定义壁纸,不知道怎么更换自定义壁纸也没关系,现在小编就教小伙伴们简洁记账自定义壁纸方法。 1)打开简洁记账,点击长按右上角的然后点击; 2)点击你要选择的照片的方式,然后点击你要的照片就可以啦。 ...
进入模式选择界面 选择创建自定义对局 选择模式信息 选择对战方位 邀请好友 对局开始 相关阅读: lol新版客户端怎么查看符文 新lol怎么更换符文

经验教程

629

收藏

71
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部