javascript - 求解读:一段有关IE浏览器兼容性问题的代码
ringa_lee
ringa_lee 2017-04-11 12:27:13
0
2
446

最近在网上看到一个上传图片预显示的插件,比较好奇就差看了一下代码是怎么写的,但是有一部分看不明白(图中红框部分),只知道和IE兼容性问题相关,但是因为对这方面一些了解比较少所以想请各位大神帮忙解读一下

另附代码:

_self.Bind = function() {
    document.getElementById(_self.Setting.UpBtn).onchange = function() {
        if (this.value) {
            if (!RegExp("\.(" + _self.Setting.ImgType.join("|") + ")$", "i").test(this.value.toLowerCase())) {
                alert(_self.Setting.ErrMsg);
                this.value = "";
                return false;
            }
            if (navigator.userAgent.indexOf("MSIE") > -1) {
                try {
                    document.getElementById(_self.Setting.ImgShow).src = _self.getObjectURL(this.files[0]);
                } catch (e) {
                    var p = document.getElementById(_self.Setting.pShow);
                    this.select();
                    top.parent.document.body.focus();
                    var src = document.selection.createRange().text;
                    document.selection.empty();
                    document.getElementById(_self.Setting.ImgShow).style.display = "none";
                    p.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
                    p.style.width = _self.Setting.Width + "px";
                    p.style.height = _self.Setting.Height + "px";
                    p.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = src;
                }
            } else {
                document.getElementById(_self.Setting.ImgShow).src = _self.getObjectURL(this.files[0]);
            }
            _self.Setting.callback();
        }
    }
}
ringa_lee
ringa_lee

ringa_lee

reply all(2)
PHPzhong
document.getElementById(_self.Setting.ImgShow).src = _self.getObjectURL(this.files[0]);

上面这段代码中的getObjectURL我查不到js有这个api
但是有一个功能相似的api : URL.createObjectURL()

所以getObjectURL方法的声明和定义应该是这样的:

Object.getObjectURL = function(Blob){
    return URL.createObjectURL(Blob)
}

又由于URL.createObjectURL()这个API在IE下只支持IE10以上,所以需要做兼容处理,也就是catch error 的部分,这也是你提出的问题所在

document.selection.createRange().text
这个方法是用来获取当前文档输入框(input或者textarea)被选中的文字
详见链接

this.select();//input[type='file'] 在选择图片后会在输入框有图片的路径地址,这个方法选中这些路径的文本
top.parent.document.body.focus();//保持在最上层文档
var src = document.selection.createRange().text;//获取图片路径地址
document.selection.empty();//取消选中
document.getElementById(_self.Setting.ImgShow).style.display = "none";//隐藏原来要显示图片的img 标签

这一段是获取图片的路径并隐藏Img标签

p.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
p.style.width = _self.Setting.Width + "px";
p.style.height = _self.Setting.Height + "px"; 
p.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = src;     

这一段是利用css的滤镜属性fliter详见链接

现学现卖,满意请给个赞~

迷茫

请问楼主最后解决了吗?我这一行
p.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = src;
ie报错,提示无效指针;

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template