2011-07-27 15 views
11

Mi problema:componente devuelto código de error: 0x80040111 (NS_ERROR_NOT_AVAILABLE)

uncaught exception: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIDOMCanvasRenderingContext2D.drawImage]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: file:///***************.js :: redrawView :: line 308" data: no] 

El código que producen este comportamiento (tmpImg está cargando dinámicamente, por lo que si no está cargado todavía, se evitarlo).

if(tmpImg!=null && tmpImg.img.complete===true && tmpImg.img.src!=null){ 
    var tmpPos = i_getCoordsImage(tmpImg); 
    var rect = getRectInCurrentView(tmpPos.x,tmpPos.y,tmpPos.w,tmpPos.h); 
    console.log(tmpImg); 
    console.log(rect); 
    mainDisplayContext.drawImage(tmpImg.img,rect.x,rect.y,rect.w,rect.h); 
} 

El problema ocurre varias veces cuando la tmpImg se acaba de cargar (a menos de acuerdo con el diario de Firebug), y luego desaparecen.
El fragmento de código se llama varias veces seguidas, por lo que no puedo ver si la imagen se muestra realmente cuando se produce el error. .
El valor de rect * son punto, algo que flotaba como {x: -1500, Y: -2500, h: 1000, w: 1000}

¿Tiene alguna idea sobre el origen de este error?

Editar 1

Este código producen el error (es necesario tener una imagen llamada "prueba.png" en el mismo directorio

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> 
<head> 
    <meta charset="UTF-8" /> 
</head> 
<body id="body"> 
    <canvas id="canvas" width="600" height="600"></canvas> 
    <script> 
    //[CDATA[ 
     var img = new Image(); 
     var mdc = document.getElementById("canvas").getContext("2d"); 
     function displayCallback(){ 
      if(img.complete===true && img.src!=null){ 
       mdc.drawImage(img,0,0,600,600); 
      } 
      setTimeout(displayCallback, 50); 
     } 
     setTimeout(function(){img.src = "test.png";}, 10000); 
     setTimeout(displayCallback, 1000); 
    //]] 
    </script> 
</body> 
</html> 

Se parece estar relacionada con el hecho de que el vacío la imagen tiene una propiedad src del "". ¿es siempre cierto?

edición 2

De hecho, para la notificación de errores, este JavaScript sería suficiente (si he entendido):

document.getElementById("canvas").getContext("2d").drawImage(new Image(),0,0); 

Respuesta

12

Usted recibe este tipo de mensaje de error inútil desde Firefox cuando una llamada a la API DOM produce una excepción de Javascript que no es atrapado El código que implementa drawImage - http://mxr.mozilla.org/mozilla-central/source/content/canvas/src/nsCanvasRenderingContext2D.cpp#3212 - parece devolver el código de error NS_ERROR_NOT_AVAILABLE (que se traduce a una excepción JS en el límite C++/JS) cuando, por alguna razón, todos los datos que necesita para dibujar la imagen no están actualmente disponible. Parece que esto puede suceder incluso cuando se considera que la imagen está completamente cargada; No estoy lo suficientemente familiarizado con esta parte del código para saber por qué podría ser así.

En mi opinión, como hacker interno ocasional de Firefox, ha encontrado un error en el navegador: el specification for drawImage no licencia la producción de una excepción con este código de error bajo ninguna circunstancia. (Observe el comentario en la línea 3243, que parece haber entendido mal lo que dice la especificación). Construya un caso de prueba completo e independiente que demuestre el problema, y ​​con gusto lo ayudaré a presentar un informe de error.

+1

Agregué un código que produce el error, he encontrado de dónde vino el problema en mi código (probando nulo en lugar de ""), si todavía dice que esto es un error, me gustaría su ayuda para señalarlo correctamente (I Me temo que la referencia HTML es un poco oscura para mí). –

+2

Parece que es un error conocido y antiguo: https://bugzilla.mozilla.org/show_bug.cgi?id=405761 Agregué su caso de prueba más corto. – zwol

Cuestiones relacionadas