`
TimerBin
  • 浏览: 363380 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

js文件上传ie报错(jquery+Iframe)

    博客分类:
  • JAVA
阅读更多

在最近工作中需要图片上传功能,前提条件:

1、上传过程中页面不刷新。

2、上传页面中不使用file按钮(隐藏file按钮),用a标签来隐式调用file按钮。

 

于是想到基于Iframe做了一个图片上传,在JS中调用$("#uploadFile").submit()时出无法在IE浏览器下兼容容,无法正常上传提示"拒绝访问"脚本错误(在Chrome、FireFox下正常)。

详情可参阅:http://blog.csdn.net/jetxt/article/details/12953397

 

以下为两种解决方案说明:

 

第一种:

在父级页面中定义Iframe标签src指定到子上传页面或服务端方法。

 

<iframe id="uploadIframe" frameborder="no"  src="..../uploadSum.html" ></iframe>

 其中uploadSum.html如下所示:

 

 

<style>
	.fileClass{
	   padding: 0 20px;
	   height: 30px;
	   margin-left:-93px;
	   line-height: 30px;
	   filter:alpha(opacity:0); 
	   z-index:999;
	   width:48px;
	   cursor:pointer;
	   opacity:0;
	 }
</style>
 <form id="uploadFile" method="post"   enctype="multipart/form-data">
<a href="javascript:void(0);" id="upload" >上传图片</a>
<input id="picimg" name="picimg" onchange="uploadPicimg()" class="fileClass" type="file" />
<script type="text/javascript">
function uploadPicimg(){
	$("#uploadFile").attr("action","...");
	$("#uploadFile").submit();
}
</script>
</form>

 

在以上代码中是设置了picimg样式,让其覆盖到id=upload的a标签上,当用户点击a标签时,实际隐式的点击了隐藏的file按钮。

说到这里有人就会问了为什么不直接为a标签绑定onclick事件,让其onclick事件直接调用$("#picimg").click(),因为一旦为a标签绑定onclick事件就会出现以上所说的IE不兼容无法上传问题。

 

这种方式在应用中比较简单常见,这里不多做解释,望谅解!

 

第二种:

将上传图片a标签与iframe一同定义在父级页面中,移出Iframe不再放在iframe包含的子页面中。其中Iframe标签src指定到子上传页面或服务端方法。

 

<script type="text/javascript">
//触发Iframe中的file按钮click事件
function doUploadPicImg() {
	$("#picimg", $("#uploadIframe")[0].contentWindow.document).click();
}
</script>
<a href="javascript:void(0);" id="upload" onClick="doUploadPicImg()" >上传图片</a>
<iframe id="uploadIframe" frameborder="no"    src="..../uploadSum.html" ></iframe>

 其中uploadSum.html如下所示:

 

 

<form id="uploadFile" method="post"   enctype="multipart/form-data">
<input id="picimg" name="picimg" onchange="uploadPicimg()" style="opacity:0;filter:alpha(opacity:0); " type="file" />
<script type="text/javascript">
function uploadPicimg(){
	$("#uploadFile").attr("action","...");
	$("#uploadFile").submit();
}
</script>
</form>

将a标签移出Iframe后再调用 onClick进行触发file按钮的click事件,可以兼容IE浏览器,不再提示“拒绝访问”错误脚本提示。

第二种方法具体什么原因解决了IE浏览器兼容问题,一直没有想明白,还望知情人士能分享下原理,不胜感激!

 

 

分享到:
评论

相关推荐

    完美解决IE9浏览器出现的对象未定义问题

    确保所有的JavaScript文件路径引用正确无误,没有拼写错误或路径缺失。同时,检查HTML文件的编码设置,确保其采用正确的字符集,如UTF-8,以避免因编码问题导致的解析异常。 其次,检查JavaScript文件的加载顺序。...

    transport.js

    冲突的原因是jquery给一个object增加了很多元素,那么在Object.prototype.toJSONString = function () 这个函数中 for (k in this) 语句中进行了无数次的循环,导致网页很卡,并且在IE中会报错。 解决方案: ...

    浏览器显示PDF插件,pdfjs.zip,支持ie11和其他浏览器,傻瓜操作,不改代码

    该写法适用于pdf流文件加载,一般情况下不需要修改,如果一定要动,其他部分不用改,只需要修改viewer.js中第4355-4380行代码,,最后var defaultUrl = array;保证defaultUrl中得到值就行了。 最后网页端传入写法:...

    ajax文件上传成功 解决浏览器兼容问题

    在IE浏览器中,由于ActiveX控件的支持,可以直接设置iframe的src属性,而在其他浏览器中,由于安全策略的限制,不能直接通过设置src属性为"javascript:false"来阻止加载页面内容。在这些浏览器中,通过设置src属性为...

    解决jQuery使用JSONP时产生的错误

    针对IE8及以上版本的浏览器,如果发生网络无法访问等非正常错误时,JQuery无法判断请求是否成功。在这种情况下,我们可以利用JQuery返回的错误信息(例如“xxxx was not called”),这表明JQuery无法根据标签的状态...

    ExtAspNet_v2.3.2_dll

    -修正了IE下Grid中的一个JS问题(feedback:lqm4108)。 -修正Alert消息中引号未编码导致的JS错误(feedback:sun1299shine)。 +集成extjs3.0.3。 -修正弹出对话框的宽度计算错误(会保持最小的状态)。 -增加新的...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -修正了IE下Grid中的一个JS问题(feedback:lqm4108)。 -修正Alert消息中引号未编码导致的JS错误(feedback:sun1299shine)。 +集成extjs3.0.3。 -修正弹出对话框的宽度计算错误(会保持最小的状态)。 -增加新的...

Global site tag (gtag.js) - Google Analytics