Je pense que j'ai trouvé l'astuce. IE ne sait pas ce qu'est un "canevas", donc quand vous créez un élément canvas avec votre javascript, cela ne fonctionne pas.
D'autres exemples que je l'ai vu faire cela pour créer leur toile:
var el = document.createElement('canvas');//this doesn't work in IE
Donc, l'astuce est de simplement tromper IE en créant quelque chose de légal et d'appeler l'initialisation de la toile sur elle à la place.
J'utilisé jquery pour faire une ajax GET pour ce bloc de HTML que je puis inséré dans le DOM:
<div id="canvasholder">
<canvas id="mycanvas" width="1024" height="768" style="width:1024px;height:768px"></canvas>
</div>
Dans le javascript après l'appel ajax est terminée et le HTML est inséré, je fais mon initialisation de canvas. C'est juste l'extrait intéressant de ma fonction init.
...
canvas = $('#mycanvas').get(0);//get dom element from jquery
if(!canvas.getContext)//function doesn't exist yet
{
//we're in IE if we reach this block
//otherwise getContext already exists
$('#canvasholder').empty();
//add #mycanvas as a div instead of a canvas
//you could use document.createElement('div') instead of jquery
$('#canvasholder').append(
'<div id="mycanvas" width="1024" height="768"></div>');
canvas = $('#mycanvas').get(0);
if(typeof G_vmlCanvasManager != 'undefined')
{
canvas = G_vmlCanvasManager.initElement(canvas);
}
}
//now you're set up to draw!
context = canvas.getContext("2d");
...
Cela fonctionne maintenant pour moi dans Firefox et IE7.
J'ai déjà essayé cette solution, mais cela n'a pas fonctionné avec IE8 ...! – user192318
Quelle version d'excanvas utilisez-vous? Apparemment, VML a changé dans IE8, vous avez donc besoin d'au moins rev. 43 pour le soutenir. Vous pouvez également essayer d'activer le mode de compatibilité IE7 avec la balise header/meta compatible X-UA. –