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
属性调用,在Firefox和Chrome浏览器中工作正常,但在Opera和Safari中无法正常工作。未触发事件onload
。为什么?
UPDATE我正在Windows上对其进行测试。
UPDATE 2问题在于_URL
是undefined
。我尝试过
var _URL = window.URL || window.webkitURL || window.mozURL || window.msURL || window.oURL;
但仍然无法正常工作。
对于Chrome,其值为object DOMURL
,对于Firefox,其值为object MozURLProperty
,但对于Safari和Opera,其值为undefined
。所以控制台说:
未捕获的异常:TypeError:无法将'_URL'转换为对象
根据this MDN page,Opera或某些版本的Safari中似乎不支持createObjectURL
。仅此一项可能是您的主要问题。您是否在错误控制台中查看了它是否抱怨缺少createObjectURL
方法。如果该方法不存在,则您将永远不会获得对.src
的赋值,因此就不会有成功的加载事件。
此外,我不能肯定地说,但这对我来说似乎是一个潜在的问题。您可能需要将新创建的Image对象存储在某个位置,以便持久保存。上面编写代码的方式,垃圾回收器可以自由处置img对象,因为不再有对其的引用。
也许您没有向我们展示所有代码,但正如您编写的那样,加载您永远不会使用的图像有什么意义?
因此,我建议您更改代码的工作方式,以不使用将不使用的图像。或者,将新创建的img标签实际存储在某个位置,以便它持久存在并且不会收集垃圾。
我还要问您如何知道图像加载成功?如果您不使用图像,怎么知道它已成功加载。