首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

一种覆盖掉window.alert()函数的兑现

2012-10-26 
一种覆盖掉window.alert()函数的实现??本文尝试实现overridde window原始alert函数,使之以其他方式显示消

一种覆盖掉window.alert()函数的实现

??本文尝试实现overridde window原始alert函数,使之以其他方式显示消息内容,同时还可以根据需要调用window原始的alert函数显示消息。(只做技术讨论)

?

??首先覆盖window.alert函数非常简单,但是要在覆盖掉alert之后,再次调用window原始的alert就不那么容易了。如下代码,在覆盖alert后再次调用window.alert(),浏览器提示stock overflow错误。

?

?

//window作用域下function alert(msg){    window.alert('info:'+msg);//调用原始alert}alert('user is null') ;//出错
?

?

如果更换自定义alert函数的作用域,在非window作用域下定义,就不会出现stock overflow错误。但是这种方式仅限在定义的作用域下使用。代码如下:

?

?

function mycontext(){   //非window作用域下   function alert(msg){        window.alert('系统提示:'+msg);//调用原始alert   }   alert('user is null') ;//'系统提示:user is null'   ......}

?

?

如何在window全局作用域下既可以覆盖alert自定义提示消息,又可以再次调用window原始alert函数呢?方法就是使用框架frame(iframe)。通过在当前document中增加一个iframe,那么在任何时候都可以调用iframe中window的原始alert函数。如下代码

?

//window作用域下覆盖alert的方法  (function(){      var subWin = top!=window?top:null; //如果存在父框架      if(subWin==null){         var iframe =  document.createElement("iframe");         iframe.style.display = 'none';         document.appendChild(iframe);//定义iframe添加进document         subWin =  iframe.contentWindow;     }       window.alert = function(msg){          subWin.alert('系统提示:'+msg);//使用iframe的原始alert函数      }  })(); alert('user is null');//'系统提示:user is null'
?

?

?

?

?

?

?

?

?

?

?

热点排行