此錯誤的另一個原因是,源圖像的尺寸太大;它們超出了實際的圖像尺寸。發生這種情況時,您會在IE中看到此錯誤,但不會在Chrome或Firefox中看到此錯誤。
假設你有一個150×150的圖像:
var imageElement = ...;
然後,如果你嘗試使用更大尺寸的源畫出它:
var sourceX = 0;
var sourceY = 0;
var sourceWidth = 200; // Too big!
var sourceHeight = 200; // Too big!
canvasContext.drawImage(imageElement,
sourceX, sourceY, sourceWidth, sourceHeight, // Too big! Will throw INDEX_SIZE_ERR
destX, destY, destWidth, destHeight);
這將INDEX_SIZE_ERR扔在IE瀏覽器。 (最新的IE瀏覽器在寫這篇文章的時間是IE11)
的修復僅僅是限制源維度:
var sourceWidth = Math.min(200, imageElement.naturalWidth);
var sourceHeight = Math.min(200, imageElement.naturalHeight);
malloc4k的回答提到了這一點,但是,他認爲,這是因爲image.width是零。我添加了這個新答案,因爲圖像寬度爲零不一定是IE上錯誤的原因。
在我的情況下,我試圖複製具有更大尺寸的圖像 - 即我的精靈圖像有100px,並且我嘗試從80px pos開始複製25px,當我將圖像大小固定爲105px時,所有圖像都開始工作。 – llamerr 2012-10-26 12:20:46