Nodejs JS本地图片预览 兼容 IE6789,现代浏览器(firefox,chrome)
Nodejs JS本地图片预览 兼容 IE6789,现代浏览器(firefox,chrome)
感谢 http://www.yueshiyu.cn/post/70cbd_a9dfcb 作者 function previewImage(file,img,callback,backgroundDiv) { var path = “”;//file.value var $img = $(img); var checkPic = function (path) { var accept = [“jpg”, “bmp”, “gif”, “png”]; for (var i = 0; i < accept.length; i++) { if (path.indexOf(accept[i]) > -1) { return true; } } return false; } //大写浏览器信息 var browser_agent = navigator.userAgent.toUpperCase(); //如果window存在URL属性,则理应为现代浏览器支持HTML5 if (window.URL) { path = file.files[0].name; if (!checkPic(path)) { if(callback) callback(false); return}; var url = window.URL.createObjectURL(file.files[0]); $img.attr(“src”, url); if (callback) callback($img); //如果为IE浏览器 } else if (browser_agent.indexOf(“MSIE”) > -1) { path = file.value; if (!checkPic(path)) { if (callback) callback(false); return };
if (browser_agent.indexOf("MSIE 6.0") > -1) {
$img.attr("src", path);
if (callback) callback($img);
} else {
//如果有预留做为背景DIV
if (backgroundDiv) {
$(backgroundDiv)[0].style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale',src='" + path + "')";
}
if (callback) callback(false);
}
}
}
有无有类似的浏览器(bom)API资料哈,做这个功能时实在是苦于无资料…
Node.js JS本地图片预览 兼容 IE6/7/8/9 和现代浏览器 (Firefox, Chrome)
感谢 原作者 提供的代码。以下是对该功能的改进版本,以确保兼容性覆盖更广范围的浏览器。
示例代码
function previewImage(file, img, callback, backgroundDiv) {
var path = "";
// 检查文件类型是否为图片
var checkPic = function (path) {
var accept = ["jpg", "bmp", "gif", "png"];
for (var i = 0; i < accept.length; i++) {
if (path.toLowerCase().endsWith("." + accept[i])) {
return true;
}
}
return false;
}
// 获取浏览器信息并判断是否为IE
var browser_agent = navigator.userAgent.toUpperCase();
// 现代浏览器(支持FileReader API)
if (window.FileReader && window.URL) {
if (file.files.length === 0) {
if (callback) callback(false);
return;
}
var reader = new FileReader();
reader.onload = function(e) {
img.src = e.target.result;
if (callback) callback(img);
};
reader.readAsDataURL(file.files[0]);
// 如果不支持FileReader API,则检查是否为IE浏览器
} else if (browser_agent.indexOf("MSIE") > -1) {
path = file.value;
if (!checkPic(path)) {
if (callback) callback(false);
return;
}
if (browser_agent.indexOf("MSIE 6.0") > -1) {
img.src = path;
if (callback) callback(img);
} else {
if (backgroundDiv) {
backgroundDiv.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale',src='" + path + "')";
}
if (callback) callback(false);
}
} else {
alert("您的浏览器不支持此功能");
}
}
解释
-
图片类型检查:
- 使用
checkPic
函数检查上传的文件扩展名是否为常见的图片格式(如.jpg
,.png
)。
- 使用
-
现代浏览器支持:
- 使用
FileReader
API 读取本地文件,并将其转换为 Data URL,以便在<img>
标签中显示。 reader.onload
事件处理程序将读取的结果设置为<img>
标签的src
属性。
- 使用
-
IE浏览器支持:
- 对于IE浏览器,使用
AlphaImageLoader
来处理图片预览。对于IE6,直接将路径赋值给<img>
标签的src
属性。 - 对于IE7/8/9,使用
filter
属性来实现图片的缩放和显示。
- 对于IE浏览器,使用
-
错误处理:
- 如果检测到浏览器不支持上述任何功能,则弹出警告提示用户。
使用方法
<input type="file" id="uploadInput" />
<img id="previewImg" src="" alt="Preview" />
<div id="backgroundDiv"></div>
<script>
document.getElementById('uploadInput').addEventListener('change', function(event) {
previewImage(event.target, document.getElementById('previewImg'), function(result) {
if (result) {
console.log("图片预览成功");
} else {
console.log("图片预览失败");
}
}, document.getElementById('backgroundDiv'));
});
</script>
这样就可以实现一个跨浏览器的本地图片预览功能,既兼容旧版IE浏览器,也适用于现代浏览器。
为了实现本地图片预览并兼容 IE6-9 和现代浏览器(如 Firefox 和 Chrome),我们可以参考您提供的代码,并做一些适当的调整和完善。下面是经过改进后的代码示例:
function previewImage(file, img, callback, backgroundDiv) {
var path = "";
if (file.files) {
path = file.files[0].name;
if (!checkPic(path)) {
if (callback) callback(false);
return;
}
var url = URL.createObjectURL(file.files[0]);
img.src = url;
if (callback) callback(img);
} else if (file.value) {
path = file.value;
if (!checkPic(path)) {
if (callback) callback(false);
return;
}
if (navigator.userAgent.indexOf("MSIE") > -1 && !document.documentMode) {
// IE6-7
img.src = path;
if (callback) callback(img);
} else if (document.documentMode && document.documentMode <= 9) {
// IE8-9
if (backgroundDiv) {
backgroundDiv.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale',src='" + path + "')";
}
if (callback) callback(false);
}
}
}
function checkPic(path) {
var accept = ["jpg", "bmp", "gif", "png"];
for (var i = 0; i < accept.length; i++) {
if (path.toLowerCase().indexOf(accept[i]) > -1) {
return true;
}
}
return false;
}
解释
- 检查文件对象:首先检查是否有
files
属性,这表明是在现代浏览器中使用 HTML5 的<input type="file">
。 - 图片格式验证:使用
checkPic
函数来验证上传的图片是否是支持的格式。 - 创建 URL:对于现代浏览器,我们使用
URL.createObjectURL
方法来生成一个指向上传文件的 URL,并将其赋值给<img>
的src
属性。 - IE 特定处理:对于 IE 浏览器,特别是 IE6-7 和 IE8-9,我们分别处理。对于 IE6-7 直接设置
<img>
的src
属性,而对于 IE8-9 使用滤镜AlphaImageLoader
来显示图片。
注意事项
- 确保您的 HTML 结构正确,例如有一个
<input type="file">
和一个<img>
元素用于显示预览图片。 - 对于 IE8-9,可能需要引入一些额外的 polyfill 来支持某些现代 JavaScript 特性。
以上代码应该能满足您的需求,并且可以很好地兼容各种浏览器。