【问题标题】:Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE)组件返回失败代码:0x80040111 (NS_ERROR_NOT_AVAILABLE)
【发布时间】:2011-10-14 10:22:24
【问题描述】:

我的问题:

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]

产生此行为的代码(tmpImg 正在动态加载,因此如果尚未加载,则跳过它)。

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

当 tmpImg 刚被加载(至少根据 Firebug 的日志)时,这个问题发生了好几次,然后消失了。
代码sn -p 连续调用了好几次,所以在报错的时候看不到图片是不是真的显示出来了。
rect.* 中的值是浮点数,类似于 {x:-1500, y:-2500,h:1000,w:1000}

你知道这个错误的根源吗?

编辑 1

此代码产生错误(您需要在同一目录中有一个名为“test.png”的图像

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

这似乎与空图像具有“”的 src 属性有关。总是这样吗?

编辑 2

事实上,对于错误报告,这个 JavaScript 就足够了(如果我理解的话):

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

【问题讨论】:

    标签: javascript image exception canvas


    【解决方案1】:

    当 DOM API 调用引发未捕获的 Javascript 异常时,您会从 Firefox 收到这种无用的错误消息。实现 drawImage 的代码——http://mxr.mozilla.org/mozilla-central/source/content/canvas/src/nsCanvasRenderingContext2D.cpp#3212——似乎返回错误代码 NS_ERROR_NOT_AVAILABLE(在 C++/JS 边界被转换为 JS 异常),由于某种原因,它需要绘制图像的所有数据都是目前不可用。即使图像被认为已完全加载,似乎也会发生这种情况;我对这部分代码不够熟悉,不知道为什么会这样。

    作为偶尔的 Firefox 内部黑客,我认为您在浏览器中发现了一个错误:specification for drawImage 在任何情况下都不允许产生带有此错误代码的异常。 (请注意第 3243 行的注释,这似乎误解了规范所说的内容。)请构建一个完整的、自包含的测试用例来演示该问题,然后我很乐意帮助您提交错误报告。

    【讨论】:

    • 添加了一个产生错误的代码,我发现我的代码中的问题来自哪里(测试 null 而不是“”),如果你仍然说这是一个错误,我会很高兴你的帮助正确地发出信号(恐怕 HTML 参考对我来说有点太晦涩了)。
    • 看起来这是一个已知的旧错误:bugzilla.mozilla.org/show_bug.cgi?id=405761 我添加了您的较短测试用例。
    猜你喜欢
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    相关资源
    最近更新 更多