JavaScript实现上传图片前本地预览及多浏览器兼容方案

作者:像素漫游时间:2026-10-28 04:35:56浏览:213

本文提供一段JavaScript代码,实现在用户选择图片后、提交前于本地进行预览的功能。代码通过判断浏览器类型,分别采用File API的createObjectURL方法(适用于Firefox、Chrome、Safari)和IE特有的AlphaImageLoader滤镜,以解决不同浏览器对文件对象访问的差异,确保在大多数主流浏览器中均能正常显示预览图。

HTML结构与事件绑定

HTML结构代码如下:

 
<div id="localImag"><img id="preview" width="-1" height="-1" style="display:none" /></div>
<asp:FileUpload ID="file_head" runat="server" onchange="javascript:setImagePreview();" />

JavaScript预览逻辑实现

对应的JavaScript处理逻辑如下:

 
<script type="text/javascript">
function setImagePreview() {
var docObj = document.getElementById("ctl00_ContentMain_file_head");
var fileName = docObj.value;
if (!fileName.match(/.jpg|.gif|.png|.bmp/i)) {
alert('您上传的图片格式不正确,请重新选择!');
return false;
} 
var imgObjPreview = document.getElementById("preview");
if (docObj.files && docObj.files[0]) {
//火狐下,直接设img属性
imgObjPreview.style.display = 'block';
imgObjPreview.style.width = '63px';
imgObjPreview.style.height = '63px';
//imgObjPreview.src = docObj.files[0].getAsDataURL();
if (window.navigator.userAgent.indexOf("Chrome") >= 1 || window.navigator.userAgent.indexOf("Safari") >= 1) {
imgObjPreview.src = window.webkitURL.createObjectURL(docObj.files[0]);
} 
else {
imgObjPreview.src = window.URL.createObjectURL(docObj.files[0]);
} 
} else {
//IE下,使用滤镜
docObj.select();
docObj.blur();
var imgSrc = document.selection.createRange().text;
var localImagId = document.getElementById("localImag");
//必须设置初始大小
localImagId.style.width = "63px";
localImagId.style.height = "63px";
//图片异常的捕捉,防止用户修改后缀来伪造图片
try {
localImagId.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
localImagId.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgSrc;
} catch (e) {
alert("您上传的图片格式不正确,请重新选择!");
return false;
} 
imgObjPreview.style.display = 'none';
document.selection.empty();
} 
return true;
} 
</script>

多浏览器兼容性处理说明

此JS代码旨在解决360浏览器(其6.2版本基于Chrome内核)的显示问题。由于Chrome内核不识别window.URL.createObjectURL,因此代码中引入了对Safari内核特有的window.webkitURL.createObjectURL的支持,以兼容更多浏览器。


关键代码片段如下:

 
window.URL.createObjectURL(docObj.files[0]);

上述代码仅在Firefox环境下原生支持,而在Chrome浏览器中无法直接识别window.URL.createObjectURL,因此需要借助Safari内核的window.webkitURL.createObjectURL来实现兼容。

作者最新文章