function controllaFoto(target, username) {
var _URL = window.URL || window.webkitURL;
var img = new Image();
img.onload = function () {
if(this.width > 240 || this.height > 240) {
document.getElementById("photoLabel").innerHTML = "Text";
document.getElementById("preview").setAttribute("src", "profile?to=showImage&username="+username);
target.value = "";
} else {
document.getElementById("photoLabel").innerHTML = "";
document.getElementById("preview").setAttribute("src", this.src);
}
};
img.src = _URL.createObjectURL(target.files[0]);
return true;
}
此脚本由onchange
和onsubmit
属性调用,在FF和Chrome中正常工作,但在Opera和Safari中则无效。事件onload
未触发。为什么呢?
更新我正在使用Windows进行测试。
更新2 问题是_URL
是undefined
。我试过
var _URL = window.URL || window.webkitURL || window.mozURL || window.msURL || window.oURL;
但仍然无法正常工作
对于Chrome,其值为object DOMURL
,对于Firefox为object MozURLProperty
,但对于Safari和Opera为undefined
。所以控制台说Uncaught exception: TypeError: Cannot convert '_URL' to object
。
答案 0 :(得分:1)
根据this MDN page,在Opera或某些版本的Safari中看起来不支持createObjectURL
。仅这一点可能是你的主要问题。您是否查看了错误控制台,看看它是否抱怨缺少createObjectURL
方法。如果该方法不存在,则永远不会获得.src
的赋值,因此永远不会有成功的加载事件。
此外,我不能肯定地说,但这对我来说也是一个潜在的问题。您可能需要将新创建的Image对象存储在某处,以便它保持不变。上面编写代码的方式,垃圾收集器可以自由处理img对象,因为不再有任何对它的引用。
也许你没有向我们展示你的所有代码,但是当你编写代码时,加载一个你永远不会使用的图像是什么意思?
所以,我建议你改变代码的工作方式,不要使用你不会使用的图像。或者,实际将新创建的img标记存储在某处,以便它持续存在并且不会收集垃圾。
我也问你怎么知道图片加载成功了?如果您没有使用该图像,您如何知道它已成功加载。