兼容最新firefox、chrome和IE的javascript图片预览实现代码


Posted in Javascript onAugust 08, 2014

javascript实现客户端file选择文件后img标签加载客户端图片实现图片预览。

测试浏览器:firefox6,firefox12,chrome 25.0.1364.172 m,IE6-IE10 都兼容

safari5.0.4不支持FileReader和file.files.item(0).getAsDataURL方法,暂时无解,需要上传到服务器后返回临时文件名用img标签加载,不知道后续的safari版本是否支持FileReader对象。

IE10下效果:

兼容最新firefox、chrome和IE的javascript图片预览实现代码

IE9下效果:

兼容最新firefox、chrome和IE的javascript图片预览实现代码

实现源代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="txt/html;charset=utf-8" />
<title>javascript实现IE,firefox客户端图片预览</title>
<script>
 //使用IE条件注释来判断是否IE6,通过判断userAgent不一定准确
 if (document.all) document.write('<!--[if lte IE 6]><script type="text/javascript">window.ie6= true<\/script><![endif]-->');
 // var ie6 = /msie 6/i.test(navigator.userAgent);//不推荐,有些系统的ie6 userAgent会是IE7或者IE8
 function change(picId,fileId) {
  var pic = document.getElementById(picId);
  var file = document.getElementById(fileId);
  if(window.FileReader){//chrome,firefox7+,opera,IE10,IE9,IE9也可以用滤镜来实现
   oFReader = new FileReader();
   oFReader.readAsDataURL(file.files[0]);
   oFReader.onload = function (oFREvent) {pic.src = oFREvent.target.result;};  
  }
  else if (document.all) {//IE8-
   file.select();
   var reallocalpath = document.selection.createRange().text//IE下获取实际的本地文件路径
   if (window.ie6) pic.src = reallocalpath; //IE6浏览器设置img的src为本地路径可以直接显示图片
   else { //非IE6版本的IE由于安全问题直接设置img的src无法显示本地图片,但是可以通过滤镜来实现,IE10浏览器不支持滤镜,需要用FileReader来实现,所以注意判断FileReader先
    pic.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='image',src=\"" + reallocalpath + "\")";
    pic.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==';//设置img的src为base64编码的透明图片,要不会显示红xx
   }
  }
  else if (file.files) {//firefox6-
   if (file.files.item(0)) {
    url = file.files.item(0).getAsDataURL();
    pic.src = url;
   }
  }
 }
</script>
</head>
<body>
<form name="form1" enctype="multipart/form-data"><table><tr>
<td> 草图1:</td>
<td >
<input type="file" name="file1" id="file1" onchange="change('pic1','file1')">
</td>
<tr>
<td>草图浏览1:</td>
<td>
<img src="images/px.gif" id="pic1" >
</td></tr><tr>
<td> 草图2:</td>
<td >
<input type="file" name="file2" id="file2" onchange="change('pic2','file2')">
</td>
<tr>
<td>草图浏览2:</td>
<td>
<img src="images/px.gif" id="pic2" >
</td></tr>
</table>
</form>
</body>
</html>
Javascript 相关文章推荐
jQuery select控制插件
Aug 17 Javascript
深入认识javascript中的eval函数
Nov 02 Javascript
打豆豆小游戏 用javascript编写的[打豆豆]小游戏
Jan 08 Javascript
js substr支持中文截取函数代码(中文是双字节)
Apr 17 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
Jan 26 Javascript
JS排序之冒泡排序详解
Apr 08 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
Apr 11 Javascript
JS实现的计数排序与基数排序算法示例
Dec 04 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
Oct 30 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
Jan 08 Javascript
jQuery--遍历操作实例小结【后代、同胞及过滤】
May 22 jQuery
解决VantUI popup 弹窗不弹出或无蒙层的问题
Nov 03 Javascript
js调试工具console.log()方法查看js代码的执行情况
Aug 08 #Javascript
JS创建类和对象的两种不同方式
Aug 08 #Javascript
将HTML格式的String转化为HTMLElement的实现方法
Aug 07 #Javascript
jquery datatable后台封装数据示例代码
Aug 07 #Javascript
jquery对象和javascript对象即DOM对象相互转换
Aug 07 #Javascript
js判断当页面无法回退时关闭网页否则就history.go(-1)
Aug 07 #Javascript
js和jquery设置disabled属性为true使按钮失效
Aug 07 #Javascript
You might like
ThinkPHP3.1.3版本新特性概述
2014/06/19 PHP
使用prototype.js进行异步操作
2007/02/07 Javascript
javascript arguments 传递给函数的隐含参数
2009/08/21 Javascript
一个简单的js动画效果代码
2010/07/20 Javascript
基于datagrid框架的查询
2013/04/08 Javascript
在表单提交前进行验证的几种方式整理
2013/07/31 Javascript
js实现日历可获得指定日期周数及星期几示例分享(js获取星期几)
2014/03/14 Javascript
jQuery实现的类似淘宝网站搜索框样式代码分享
2015/08/24 Javascript
JavaScript代码实现左右上下自动晃动自动移动
2016/04/08 Javascript
web 前端常用组件之Layer弹出层组件
2016/09/22 Javascript
ES6中class类用法实例浅析
2017/04/06 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
2017/09/28 Javascript
vue2.0 和 animate.css的结合使用
2017/12/12 Javascript
Vue实现美团app的影院推荐选座功能【推荐】
2018/08/29 Javascript
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
详解几十行代码实现一个vue的状态管理
2019/01/28 Javascript
Vue打包部署到Nginx时,css样式不生效的解决方式
2020/08/03 Javascript
uni-app 自定义底部导航栏的实现
2020/12/11 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
利用soaplib搭建webservice详细步骤和实例代码
2013/11/20 Python
python实现忽略大小写对字符串列表排序的方法
2014/09/25 Python
Linux环境下MySQL-python安装过程分享
2015/02/02 Python
数据清洗--DataFrame中的空值处理方法
2018/07/03 Python
python 实现得到当前时间偏移day天后的日期方法
2018/12/31 Python
python使用celery实现异步任务执行的例子
2019/08/28 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
2019/10/12 Python
Django项目基础配置和基本使用过程解析
2019/11/25 Python
Ted Baker美国官网:英国时尚品牌
2018/10/29 全球购物
Laura Geller官网:美国彩妆品牌
2018/12/29 全球购物
自我鉴定怎么写
2014/01/12 职场文书
小学生成长感言
2014/01/30 职场文书
2014年电话销售工作总结
2014/12/01 职场文书
2015国庆节感想
2015/08/04 职场文书
工作计划范文之财务管理
2019/08/09 职场文书
Nginx反爬虫策略,防止UA抓取网站
2021/03/31 Servers