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

2016-02-19 22:16 4 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此情况最明显),所以还是用事件比较保险一点。 

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

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);
    }

}

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

function LoadCompleted() { loadComplete=true; }

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

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

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

延伸阅读
《死侍》自定义键位心得完美自定义键位 方式1: Q作为传送反击键,鼠标左键轻击,右键重击,中键开枪,E键瞄准放大,R重装和互动,ZXC分别对应键盘的轻枪重,其他不变。 鼠标左键轻击,右键重击,中键开枪,这个几乎没什么可说的。 ZXC的定义是不想占用其他键位,再就是方便看刚开始了解连招,也比较形象和对称,有时还可以用来释放动...
卡卡自定义食物方法   卡卡已经有多种食物了,但是由于食用食物习惯不一样,小伙伴可以自定义更多不同的食物。一起来跟图老师小编学习下教程吧!接下来图老师小编就教大家卡卡自定义食物方法。 1)打开卡卡应用,进入默认页面后点击左上角,接着点击左上角图标。(如下图) 2)接着点击,点击右上角。(如下图) ...
喝水宝自定义水杯方法   喝水宝自定义水杯方法。喝水宝只要设置好喝水量等,快速帮助小伙伴记录喝水量!那么我们先来看看添加喝水记录时的水杯如何自定义水量。下面时小编为大家带来的教程喝水宝自定义水杯方法。 1)打开进入应用后点击右下角图标。 2)接着点击你要自定义水量的水杯右边的,编辑水量后点击即可。 ...
--------------------------------------------------- -------自定义的TShockwaveflash.ocx---------------- --------------------------------------------------- --------------------------------------------------- 添加功能:对鼠标在 flash.ocx 中的信息捕获.---------- --------------------------------------------------- 可捕获鼠...
标签: Web开发
今天在网上看到ASP.Net 2.0中注册自定义控件的好方法,记录如下。 在web.config 文件中全局注册自定义控件 system.web       pages         controls           add tagPrefix="rx" assembly="HYLQ.Component" ...

经验教程

792

收藏

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