zl程序教程

您现在的位置是:首页 >  前端

当前栏目

javascript中兼容主流浏览器的动态生成iframe方法

JavaScript方法浏览器 生成 动态 兼容 iframe 主流
2023-06-13 09:15:26 时间

以下代码在IE8下运行通过,在IE9中出错:

复制代码代码如下:

document.createElement("<iframeid="yige-org-iframe"src="yige.org.logo.gif"style="position:absolute;top:0;left:0;width:1px;height:1px;visibility:hidden;"></iframe>");

错误提示:exception:SCRIPT5022:DOMException:INVALID_CHARACTER_ERR(5)

思路分析:
第一步:兼容IE9,firefox,Opera,Safari等浏览器;

复制代码代码如下:

variframe=document.createElement("iframe");
iframe.setAttribute("id","yui-history-iframe");
iframe.setAttribute("src","../../images/defaults/transparent-pixel.gif");
iframe.setAttribute("style","position:absolute;top:0;left:0;width:1px;height:1px;visibility:hidden;");


第二步:兼容IE6-8:由于ie6-8不能修改iframe的name属性

复制代码代码如下:
varoFrame=isIE?document.createElement("<iframename=/""+this._FrameName+"/">"):document.createElement("iframe");
oFrame.name="iframName";

综合解决办法:

复制代码代码如下:
varisIE=(document.all)?true:false;//这里仅仅简单的对是否是IE进行判断,详细浏览器判断:请参考浏览器类型侦测
varua=navigator.userAgent.toLowerCase().match(/msie([/d.]+)/)[1];
if(ua=="9.0"){
   isIE=false;
}
varoFrame=isIE?document.createElement("<iframename=/""+this._FrameName+"/">"):document.createElement("iframe");oFrame.name="iframName";
//=========================

functionajaxpost(formid,showid,waitid,showidclass,submitbtn,recall){
   varwaitid=typeofwaitid=="undefined"||waitid===null?showid:(waitid!==""?waitid:"");
   varshowidclass=!showidclass?"":showidclass;
   varajaxframeid="ajaxframe";
   varajaxframe=$(ajaxframeid);
   varformtarget=$(formid).target;

   varhandleResult=function(){
       vars="";
       varevaled=false;

       showloading("none");
       try{
           s=$(ajaxframeid).contentWindow.document.XMLDocument.text;
       }catch(e){
           try{
               s=$(ajaxframeid).contentWindow.document.documentElement.firstChild.wholeText;
           }catch(e){
               try{
                   s=$(ajaxframeid).contentWindow.document.documentElement.firstChild.nodeValue;
               }catch(e){
                   s="内部错误,无法显示此内容";
               }
           }
       }

       if(s!=""&&s.indexOf("ajaxerror")!=-1){
           evalscript(s);
           evaled=true;
       }
       if(showidclass){
           $(showid).className=showidclass;
           if(submitbtn){
               submitbtn.disabled=false;
           }
       }
       if(!evaled&&(typeofajaxerror=="undefined"||!ajaxerror)){
           ajaxinnerhtml($(showid),s);
       }
       ajaxerror=null;
       if($(formid))$(formid).target=formtarget;
       if(typeofrecall=="function"){
           recall();
       }else{
           eval(recall);
       }
       if(!evaled)evalscript(s);
       ajaxframe.loading=0;
       $("append_parent").removeChild(ajaxframe);
   };
   if(!ajaxframe){
       try{
           ajaxframe=document.createElement("<iframename=""+ajaxframeid+""id=""+ajaxframeid+""></iframe>");
       }catch(e){
           ajaxframe=document.createElement("iframe");
           ajaxframe.name=ajaxframeid;
           ajaxframe.id=ajaxframeid;
       }
       ajaxframe.style.display="none";
       ajaxframe.loading=1;
       $("append_parent").appendChild(ajaxframe);
   }elseif(ajaxframe.loading){
       returnfalse;
   }

   _attachEvent(ajaxframe,"load",handleResult);

   showloading();
   $(formid).target=ajaxframeid;
   $(formid).action+="&inajax=1";
   $(formid).submit();
   returnfalse;
}