最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) - Stack Overflow

programmeradmin0浏览0评论

My problem :

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]

The code which produce this behaviour (tmpImg is loading dynamically, so if it is not loaded yet, it skip it).

if(tmpImg!=null && tmpImg.imgplete===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);
}

The problem happens several times when the tmpImg is just loaded (a least according to Firebug's log), and then disappear.
The code snippet is called several times in a row, so I can't see if the image is actually displayed when the error is thrown.
The value in rect.* are floating point, something like {x:-1500, y:-2500,h:1000,w:1000}

Do you have any idea about the origin of this error ?

Edit 1

This code produce the error (you need to have an image named "test.png" in the same directory

<!DOCTYPE html>
<html xmlns="" 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(imgplete===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>

It seems related to the fact that the empty image has a src propriety of "". Is it always true ?

edit 2

In fact, for the bug reporting, this JavaScript would suffice (if I understood) :

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

My problem :

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]

The code which produce this behaviour (tmpImg is loading dynamically, so if it is not loaded yet, it skip it).

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);
}

The problem happens several times when the tmpImg is just loaded (a least according to Firebug's log), and then disappear.
The code snippet is called several times in a row, so I can't see if the image is actually displayed when the error is thrown.
The value in rect.* are floating point, something like {x:-1500, y:-2500,h:1000,w:1000}

Do you have any idea about the origin of this error ?

Edit 1

This code produce the error (you need to have an image named "test.png" in the same directory

<!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>

It seems related to the fact that the empty image has a src propriety of "". Is it always true ?

edit 2

In fact, for the bug reporting, this JavaScript would suffice (if I understood) :

document.getElementById("canvas").getContext("2d").drawImage(new Image(),0,0);
Share Improve this question edited Jul 28, 2011 at 7:25 Clement Bellot asked Jul 27, 2011 at 16:13 Clement BellotClement Bellot 8411 gold badge7 silver badges20 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 13

You get this kind of unhelpful error message from Firefox when a DOM API call throws a Javascript exception that isn't caught. The code implementing drawImage -- http://mxr.mozilla.org/mozilla-central/source/content/canvas/src/nsCanvasRenderingContext2D.cpp#3212 -- appears to return the error code NS_ERROR_NOT_AVAILABLE (which is translated to a JS exception at the C++/JS boundary) when, for some reason, all of the data it needs to draw the image is not currently available. It appears that this can happen even when the image is considered to be fully loaded; I am not familiar enough with this part of the code to know why that might be.

It is my opinion as an occasional Firefox internals hacker that you have found a bug in the browser: the specification for drawImage does not license the production of an exception with this error code under any circumstances. (Note the comment on line 3243, which seems to have misunderstood what the spec says.) Please construct a complete, self-contained test case that demonstrates the problem, and I will then be happy to help you file a bug report.

发布评论

评论列表(0)

  1. 暂无评论