javascript中兼容主流浏览器的动态生成iframe方法
以下代码在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等浏览器;
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;
}
相关文章
- 【说站】JavaScript垃圾回收的优化方法
- JavaScript、js文件、Node.js、静态文件
- javascript jssdk退出微信的方法详解编程语言
- 使用 JavaScript 调用 Linux 命令的实现方法(js调用linux命令)
- javascript实现的类似hao123的多邮箱登录效果
- Javascript更新JavaScript数组的uniq方法
- 用JavaScript实现单继承和多继承的简单方法
- JavaScript滚轮事件使用说明
- 让浏览器非阻塞加载javascript的几种方法小结
- JavaScript转换农历类实现及调用方法
- javascript时间函数基础介绍
- 基于KMP算法JavaScript的实现方法分析
- javascript中数组中求最大值示例代码
- javascript类型转换使用方法
- javascript跨浏览器的属性判断方法
- javascript事件函数中获得事件源的两种不错方法
- JavaScript数组深拷贝和浅拷贝的两种方法
- javascript中的return和闭包函数浅析
- JavaScript字符串对象substring方法入门实例(用于截取字符串)
- 借助JavaScript脚本判断浏览器FlashPlayer信息的方法