js图片上传预览兼容写法

浏览器厂商不同,实现某种特定功能需要进行兼容处理,如图片预览,主流浏览器支持html5 FileReader,但是IE就****

1.FileReader

目前为止,firefox3.6+、 chrome6+、 Safari5.2+、 Opera11+、及IE10浏览器支持FileReader对象。

用法:

html

<input type="file" id="myfile">
<img src="" id="img" alt="">

js

<script>
ipt.onchange=function(){
        
    var f=new FileReader();//获取FileReader实例对象

    f.readAsDataURL(myfile.files[0]);//读取图片base64数据

    f.onload=function(){//读取完毕将结果赋值对象img src

        img.src=this.result;

    }

}
</script>

IE处理方式

比较欣慰的是IE中file表单可以获取选中图片的绝对路径,不要急,有绝对路径了,确不能直接赋值给img,因为除了IE6之外,由于安全问题直接设置img的src无法显示本地图片,但是可以通过滤镜来实现:

非IE6

myfile.select();
myfile.blur();
var reallocalpath = document.selection.createRange().text;
img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale',src="" + reallocalpath + "")";  
// 设置img的src为base64编码的透明图片 取消显示浏览器默认图片  
img.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==';  

IE6

myfile.select();
myfile.blur();
var reallocalpath = document.selection.createRange().text;
img.src=reallocalpath;

兼容处理完整代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <input type="file" id="myfile">
    <img src="" id="img" alt="">
</body>
<script>
    myfile.onchange=function(){
        if(window.FileReader){
            var f=new FileReader();
            f.readAsDataURL(myfile.files[0]);
            f.onload=function(){
                img.src=this.result;
            }
        }else{
            var isIE = navigator.userAgent.match(/MSIE/)!= null,  
            isIE6 = navigator.userAgent.match(/MSIE 6.0/)!= null;
            if(isIE) {  
                 myfile.select();
                 myfile.blur();
                 var reallocalpath = document.selection.createRange().text;
                // IE6浏览器设置img的src为本地路径可以直接显示图片  
                if (isIE6) {  
                    img.src = reallocalpath;  
                }else {  
                    // 非IE6版本的IE由于安全问题直接设置img的src无法显示本地图片,但是可以通过滤镜来实现  
                    img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale',src="" + reallocalpath + "")";  
                    // 设置img的src为base64编码的透明图片 取消显示浏览器默认图片  
                    img.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==';  
                }  
            }   
        }
    }
</script>
</html>

加油!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,702评论 1 92
  • 序章 谈谈“浏览器兼容性”的问题?很多前端的面试或笔试中,都有比较笼统的“说说你所知道的各浏览器存在的兼容问题”,...
    麻辣小隔壁阅读 8,219评论 1 57
  • 一:在制作一个Web应用或Web站点的过程中,你是如何考虑他的UI、安全性、高性能、SEO、可维护性以及技术因素的...
    Arno_z阅读 5,055评论 0 1
  • 学会使用CSS选择器熟记CSS样式和外观属性熟练掌握CSS各种选择器熟练掌握CSS各种选择器熟练掌握CSS三种显示...
    七彩小鹿阅读 11,449评论 2 66
  • 我近期的目标是让儿子快乐学习、提高的学习热情和书写的认真,提升学习成绩,各科成绩达到95分,为小升初打下坚实的基础...
    归韵阅读 748评论 0 0

友情链接更多精彩内容