context.drawImage()不适用于新的Image()实例(chrome)

Flo*_*ild 5 javascript google-chrome canvas image preloading

我试图找出为什么在画布中绘制之前经典的图像预加载方式是在chrome上触发"类型错误".

我们来看看情况:

我尝试以3种不同的方式预加载图像:

  1. 创建一个新的Image()实例
  2. 创建一个图像元素
  3. 创建一个jQuery图像对象

或者如果你喜欢一些代码:

var canvas1 = document.getElementById('canvas-1'),
    context1 = canvas1.getContext('2d'),
    image1 = new Image(),
    canvas2 = document.getElementById('canvas-2'),
    context2 = canvas2.getContext('2d'),
    image2 = document.createElement('img'),
    $canvas3 = $('#canvas-3'),
    context3 = $canvas3.get(0).getContext('2d'),
    $image3 = $('<img>'),
    loadImage = function (image, context, debugIndice) {
        debugIndice = debugIndice || -1;
        image.onload = function () {
            try {
                context.drawImage(this, 0, 0, 100, 100);
            }
            catch (e) {
                console.log('error for debugIndice', debugIndice, e, this);
            }
        }
        image.src = "http://upload.wikimedia.org/wikipedia/commons/8/87/Google_Chrome_icon_%282011%29.png";
    };

loadImage(image1, context1, 1);
loadImage(image2, context2, 2);
loadImage($image3.get(0), context3, 3);
Run Code Online (Sandbox Code Playgroud)

请在这里观看小提琴.

我第一次调用loadImage只有一个Type错误.

我在我公司的Windows上使用谷歌浏览器27.0.1453.94,在Mac OS X上使用谷歌浏览器27.0.1453.93,两者都是x64平台.

这段代码在Firefox中工作正常,甚至IE9(我不是在开玩笑,我发誓)

有人知道Chrome中的这个Image()类问题吗?

编辑:这是一个错误的屏幕: Chrome  - 图片错误

你可以在这里看到真实尺寸.

这不是一个大问题,无论如何我会使用jQuery方式,但我真的很好奇,看看是什么原因,为什么我会失去一些时间来修复它!

我看了看这个bug.

我还在问,因为我不确定它是一样的吗?!

Sim*_*ias 1

这不完全是一个解决方案,因为这是一个 Chrome 错误。但这里是他们的跟踪器上的相关 Chrome 错误。这是一个已知问题,应该在不久的将来得到修复: https: //code.google.com/p/chromium/issues/detail ?id=238071

同时,使用document.createElement("img")代替new Image().