我有个问题。我正试着在画布上画一幅画。图像不是来自HTML页面,而是位于一个文件中。下面是我使用的代码:
var img = new Image();
img.src = "/images/logo.jpg";
this._canvas.drawImage(img, 300, 300);// this is line 14
现在,问题来了。这似乎在火狐和IE10上不起作用(我还没有在其他浏览器上测试过)。在Firefox (21)上,我得到:
[19:09:02.976] NS_ERROR_NOT_AVAILABLE: Component is not available @ file:///D:/Watermellon/scripts/base-classes.js:14
在IE10上,我得到了:
SCRIPT16389: Unspecified error.
base-classes.js, line 14 character 13
这些文件及其目录是:
root/index.html
root/scripts/base-classes.js
root/images/logo.jpg
现在,当我将img.src更改为URL (来自另一个站点的图像)时,一切正常,图像在一段延迟后自动绘制(因为它是从url获取的)。我做错了什么?
发布于 2013-06-12 00:29:31
在尝试将图像绘制到画布之前,您需要等待图像加载:
var img = new Image();
img.src = "/images/logo.jpg";
img.onload = function () {
this._canvas.drawImage(img, 300, 300);// this is line 14
}
发布于 2015-03-04 02:17:18
我猜这里的问题是,当资源可用时?,但有一种方法可以确认资源可用,只需检查图像对象的'complete‘属性。
if (img.complete == true){
// is available.
} else {
// wait until is ready.
}
此外,您还可以使用onload事件和delay方法来创建一个merge方法来检查这两个东西。
var img = new Image();
//first attach handler
img.onload = function(e){
if (e.target.complete == true) {
yourHandler(e);
} else {
var maxTimes = 10;
var countTimes = 0;
function retryLoadImage() {
setTimeout(function () {
if (countTimes > maxTimes) {
// -- cannot load image.
return;
} else {
if (e.target.complete == true) {
yourHandler(e);
} else {
retryLoadImage();
}
}
countTimes++;
}, 50);
};
}
};
img.src = yourSource;
这对我很有效!在IE和FF上。
https://stackoverflow.com/questions/17049176
复制相似问题