有没有可靠的方法在IE11中使用ctx.drawImage()?

时间:2015-10-01 15:25:27

标签: javascript canvas internet-explorer-11

我有一个脚本,可以从数据查询中创建动态SVG图形。我需要将它们粘贴在PDF中,我正在使用jsPDF。不幸的是,jsPDF自己的addSVG似乎没有用,所以我花了一些时间尝试使用canvas将SVG转换为PNG。

我似乎将SVG数据URI插入到img对象中,但是当我尝试将其绘制到画布时,我在IE11中收到“意外的属性或方法”错误。

我尝试了以下内容:

img.onload = function () {
    ctx.drawImage(img,0,0);
}

img.onload = function () {
    try {
        ctx.drawImage(img,0,0);
    }
    catch (err) {
        setTimeout(ctx.drawImage(img,0,0),1);
    }
}

img.addEventListener("load", function () {
    ctx.drawImage(img,0,0);
}

img.addEventListener("load", function () {
    try {
        ctx.drawImage(img,0,0);
    }
    catch (err) {
        setTimeout(ctx.drawImage(img,0,0),1);
    }
)}

最后一个似乎是最可靠的,使用addEventListener来自MSDN;但它仍会偶尔抛出相同的错误。我也直接在我的html中声明了画布,我已经尝试了setTimeout()的不同时间。

是否有任何万无一失的方法可以确保它在IE11中有效?

编辑:为了澄清,var ctx = canvas.getContext('2d')只是img.onloadimg.addEventListener之上的一两行。有趣的是,MSDN文档here内部声明了ctx,即img.addEventListener("load", function () { var ctx = canvas.getContext('2d'); ... }

错误始终为0x8000ffff - JavaScript runtime error: Unexpected call to method or property access.,调试程序会突出显示ctx.drawImage行。

0 个答案:

没有答案