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


Posted in Javascript onAugust 09, 2013

首先,我们应该可以先明确,为什么我们用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,有兴趣的朋友可以共同研究下。
Javascript 相关文章推荐
JavaScript判断窗口是否最小化的代码(跨浏览器)
Aug 01 Javascript
基于jquery的表头固定的若干方法
Jan 27 Javascript
jquery 实现二级/三级/多级联动菜单的思路及代码
Apr 08 Javascript
jQuery 如何先创建、再修改、后添加DOM元素
May 20 Javascript
jquery队列函数用法实例
Dec 16 Javascript
js限制input标签中只能输入中文
Jun 26 Javascript
javascript十六进制数字和ASCII字符之间的转换方法
Dec 27 Javascript
node基于puppeteer模拟登录抓取页面的实现
May 09 Javascript
解决angular双向绑定无效果,ng-model不能正常显示的问题
Oct 02 Javascript
jquery多级树形下拉菜单的实例代码
Jul 09 jQuery
微信小程序 wxParse插件显示视频问题
Sep 27 Javascript
Ajax实现三级联动效果
Oct 05 Javascript
Jquery显示、隐藏元素以及添加删除样式
Aug 09 #Javascript
jquery实现文字由下到上循环滚动的实例代码
Aug 09 #Javascript
jquery 实现上下滚动效果示例代码
Aug 09 #Javascript
15条JavaScript最佳实践小结
Aug 09 #Javascript
web网页按比例显示图片实现原理及js代码
Aug 09 #Javascript
html向js方法传递参数具体实现
Aug 08 #Javascript
js获取控件位置以及不同浏览器中的差别介绍
Aug 08 #Javascript
You might like
php debug 安装技巧
2011/04/30 PHP
ThinkPHP自动验证失败的解决方法
2011/06/09 PHP
php缩放gif和png图透明背景变成黑色的解决方法
2014/10/14 PHP
php实现俄罗斯乘法实例
2015/03/07 PHP
PHP数组访问常用方法解析
2020/09/05 PHP
js 多种变量定义(对象直接量,数组直接量和函数直接量)
2010/05/24 Javascript
JS实现图片翻书效果示例代码
2013/09/09 Javascript
JavaScript中String.match()方法的使用详解
2015/06/06 Javascript
JavaScript使用DeviceOne开发实战(二) 生成调试安装包
2015/12/01 Javascript
基于jQuery和CSS3制作响应式水平时间轴附源码下载
2015/12/20 Javascript
JavaScript实现的选择排序算法实例分析
2017/04/14 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
文本溢出插件jquery.dotdotdot.js使用方法详解
2017/06/22 jQuery
react+redux的升级版todoList的实现
2017/12/18 Javascript
axios中cookie跨域及相关配置示例详解
2017/12/20 Javascript
webpack 样式加载的实现原理
2018/06/12 Javascript
js实现转动骰子模型
2019/10/24 Javascript
ES6学习笔记之字符串、数组、对象、函数新增知识点实例分析
2020/01/22 Javascript
三步搞定:Vue.js调用Android原生操作
2020/09/07 Javascript
[56:42]VP vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python中的异常处理相关语句基础学习笔记
2016/07/11 Python
Python numpy实现数组合并实例(vstack,hstack)
2018/01/09 Python
50行Python代码获取高考志愿信息的实现方法
2019/07/23 Python
python时间日期操作方法实例小结
2020/02/06 Python
python 爬虫爬取京东ps4售卖情况
2020/12/18 Python
美国专业消费电子及摄影器材网站:B&H Photo Video
2019/12/18 全球购物
大学生简历的个人自我评价
2013/12/04 职场文书
2015年幼儿园新年寄语
2014/12/08 职场文书
2015自愿离婚协议书范本
2015/01/28 职场文书
齐云山导游词
2015/02/06 职场文书
召开会议通知范文
2015/04/15 职场文书
小爸爸观后感
2015/06/15 职场文书
学历证明样本
2015/06/16 职场文书
手术室消毒隔离制度
2015/08/05 职场文书
导游词之山东八大关
2019/12/18 职场文书
Win11 BitLocker 驱动器加密
2022/04/19 数码科技