All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
WebService服务和ajax使用教程_.net资料_编程技术
使用PagedDataSource类实现DataList和Repeater控件的分页显示_[Asp.Net教程]
SQL,Server和Access、Excel数据传输_[SQL,Server教程]
SQL,Server,2005—有关开发的10个最重要的特点_[SQL,Server教程]_0
Page_Init、Page_Load,方法的使用原理_[Asp.Net教程]
应该学会:ASP.NET的,Session,详解_.net资料_编程技术
c#数据结构中对数的概念以及使用
PHP连接远程MYSQL和MYSQL5.1中文乱码处理方法_[PHP教程]
SQL2000里的数据类型_[SQL,Server教程]
ASP.NET技巧:下载文件关闭窗体之解决方法_[Asp.Net教程]
Reading number is top 10 pictures
Magnificent cloud1
A man's favorite things9
Exquisite decoration is not paying too much2
China's zhejiang university to create the world's most light material
漂亮的跳舞妹妹1
再发一张清纯美眉的照片
Other people's teacher VS my teacher
Average female college students3
自己约的炮,含泪也要打完
Exquisite decoration is not paying too much3
Download software ranking
Eclipse 4.2.2 For Win64
VC++6.0培训教程
WebService在.NET中的实战应用教学视频 → 第4集
Tram sex maniac 2 (H) rar bag5
Unix video tutorial17
jdk1.6 for windows
致我们终将逝去的青春
中国结婚习俗实录
Sora aoi, the maid, students' uniforms
株洲本地在线棋牌游戏
delv published in(发表于) 2013/12/31 6:40:15 Edit(编辑)
如何在服务端(Page.Write)调用自定义的JS方法_JavaScript技术_编程技术

如何在服务端(Page.Write)调用自定义的JS方法_JavaScript技术_编程技术

如何在服务端(Page.Write)调用自定义的JS方法_JavaScript技术_编程技术-你的首页-uuhomepage.com

  自从[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);
}
}
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,有兴趣的朋友可以共同研究下。





添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.