被 FF and IE 的 image onload onerror 折腾的一天
来源:互联网 发布:人体透视相机软件 编辑:程序博客网 时间:2024/06/15 08:04
本来是一个简单的img onload=javascript:this.src='' onerror= 的过程,
但是遇到几个问题:
1、FF的onerror怎么也触发不了,后来查看源码发现,src=""为空时,FF不认为image载入失败,郁闷。
2、onload死活就是调用不到,既然onload 不是标准,那我就用onerror好了,但是问题又出来了
3、onerror后再onerror怎么办:
再次onerror=function{XXXXXX}。
4、最初想法是[onerror="this.src='../../common/skins/default/images/mid_pic_01.jpg'" ],但是其中指定的路径是不存在的,于是一旦img标签的src属性指定的路径不存在时,onerror会被不停调用,形成了无限递归。IE就会报Stack overflow at line: 0:堆溢出的异常。
另附FF IE innerHTML outerHTML 兼容代码
///////////////////////////////////////////////////////////////////////////////////////////
// 主要实现ff和ie的一些属性、方法的兼容
///////////////////////////////////////////////////////////////////////////////////////////
if(window.HTMLElement) {
//兼容 ff ie 的outerHTML 代码 开始
HTMLElement.prototype.__defineSetter__("outerHTML",function(sHTML){
var r=this.ownerDocument.createRange();
r.setStartBefore(this);
var df=r.createContextualFragment(sHTML);
this.parentNode.replaceChild(df,this);
return sHTML;
});
HTMLElement.prototype.__defineGetter__("outerHTML",function(){
var attr;
var attrs=this.attributes;
var str="<"+this.tagName.toLowerCase();
for(var i=0;i<attrs.length;i++){
attr=attrs[i];
if(attr.specified)
str+=" "+attr.name+'="'+attr.value+'"';
}
if(!this.canHaveChildren)
return str+">";
return str+">"+this.innerHTML+"</"+this.tagName.toLowerCase()+">";
});
HTMLElement.prototype.__defineGetter__("canHaveChildren",function(){
switch(this.tagName.toLowerCase()){
case "area":
case "base":
case "basefont":
case "col":
case "frame":
case "hr":
case "img":
case "br":
case "input":
case "isindex":
case "link":
case "meta":
case "param":
return false;
}
return true;
});
//兼容 ff ie 的outerHTML 代码 结束
//兼容 ff ie 的click 代码 开始
HTMLElement.prototype.click = function()
{
var evt = this.ownerDocument.createEvent('MouseEvents');
evt.initMouseEvent('click', true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
this.dispatchEvent(evt);
}
//兼容 ff ie 的click 代码 结束
/**兼容ie的innerText start added by huwei*/
HTMLElement.prototype.__defineGetter__("innerText",
function(){
return this.textContent.replace(/(^/s*)|(/s*$)/g, "");
}
);
HTMLElement.prototype.__defineSetter__("innerText",
function(sText){
this.textContent=sText;
}
);
/**兼容ie的innerText end*/
/**兼容ie的event等
调用方式:var event = getEvent();
Start added by huwei*/
function getEvent(){
if(document.all) return window.event;
func = getEvent.caller;
while(func!=null){
var arg0=func.arguments[0];
if(arg0 instanceof Event) {
return arg0;
}
func=func.caller;
}
return null;
}
/**兼容ie的event等 end*/
}
- 被 FF and IE 的 image onload onerror 折腾的一天
- IE中Image .onload的问题
- IE中Image.onload失效的问题
- 利用图片onload、onerror实现ie fox 的多线程,并保证顺序
- IE浏览器中Image对象onload失效的…
- IE浏览器中Image对象onload失效的解决办法
- IE浏览器中Image对象onload失效的解决办法
- 关于IE中image的onload事件失效解决问题
- IE浏览器中Image对象onload失效的解决办法
- window.onload兼容ie和ff以及多次调用导致相冲突的解决方法
- JS的 image onload事件
- ie下的window onload
- 折腾了一天的硬盘
- 兼容FF IE的Event
- IE和FF的差异
- IE和FF的兼容
- IE、FF的基本注意事项
- IE 和 FF 的区别?
- Linux下MySQL数据库二进制日志恢复方法
- 用状态机实现XML解析器 - C++环境
- c++ 对象的内存布局
- C#多线程学习(三) 生产者和消费者
- SQL 扫描参数(SARG)
- 被 FF and IE 的 image onload onerror 折腾的一天
- Ajax实现无刷新导航
- linux库的知识
- 路由器的工作流程
- 辨别网线质量的方法
- eclipse 无法启动 JVM terminated. Exit code=-1 的解决办法
- ORACLE 动态SQL中的多个单引号
- C#多线程学习(四) 多线程的自动管理(线程池)
- 在Acegi认证框架下的ajax异步登录处理