Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用画布时,Firefox抛出错误0x80004005_Javascript_Jquery_Firefox_Canvas - Fatal编程技术网

Javascript 使用画布时,Firefox抛出错误0x80004005

Javascript 使用画布时,Firefox抛出错误0x80004005,javascript,jquery,firefox,canvas,Javascript,Jquery,Firefox,Canvas,在Firefox上使用画布时,有时会出现如下错误: 错误:未捕获异常:[异常…”组件返回失败 代码:0x80004005(NS\U错误\U故障) [nsIDOMCanvasRenderingContext2D.lineWidth]“nsresult:”0x80004005 (NS_错误_失败)“位置:”JS帧:: 媒体/js/canvas/Rectangle.js:::第34行“数据:否] 当我在for循环中处理5个以上的画布元素时,就会发生这种情况。创建它们的功能是: function add

在Firefox上使用画布时,有时会出现如下错误:

错误:未捕获异常:[异常…”组件返回失败 代码:0x80004005(NS\U错误\U故障) [nsIDOMCanvasRenderingContext2D.lineWidth]“nsresult:”0x80004005 (NS_错误_失败)“位置:”JS帧:: 媒体/js/canvas/Rectangle.js:::第34行“数据:否]

当我在for循环中处理5个以上的画布元素时,就会发生这种情况。创建它们的功能是:

function addCanvas(id) {
var canvas = document.getElementById(id);

if (canvas == null) {
    $('#content').append(
        '<canvas id="' + id + '" width="' + workAreaWidth +'" height="' 
            + workAreaHeight + '"></canvas>'
    );

    canvas = document.getElementById(id).getContext('2d');
} else {
    canvas = canvas.getContext('2d');
    canvas.setTransform(1, 0, 0, 1, 0, 0);
    canvas.clearRect(0, 0, workAreaWidth, workAreaHeight);
}   

return canvas;
}
函数addCanvas(id){
var canvas=document.getElementById(id);
if(canvas==null){
$(“#内容”)。追加(
''
);
canvas=document.getElementById(id).getContext('2d');
}否则{
canvas=canvas.getContext('2d');
setTransform(1,0,0,1,0,0);
canvas.clearRect(0,0,工作区宽度,工作区高度);
}   
返回画布;
}
for循环位于另一个函数中

发生的情况是,并非所有画布元素都会更新。我想是例外的原因吧

我不能发布它确实失败的地方的代码,因为它在许多地方随机失败,总是有相同的错误

Firefox版本是9.0,但也发生在8.0.1上。我没有在以前的版本中测试它。我的操作系统是Mac雪豹。我想这会有帮助的。它不会在Chrome或Safari上失败


感谢您的帮助。

这些错误消息让新手感到困惑,但其中包含大量信息。重要的部分是:

组件返回故障代码:0x80004005(NS\U错误\U故障)[nsIDOMCanvasRenderingContext2D.lineWidth]

忽略十六进制数:这表示访问器
nsIDOMRenderingContext2D.lineWidth
返回的是一般故障代码(
NS\u ERROR\u failure
),而不是线宽<代码> NIDOMReNDERIN CONTXEX2D2/代码>是C++类的内部名称,它实现了在CabVIEW元素上从代码> GETFrEATE(“2D”)中返回的对象。 位置:“JS frame::media/JS/canvas/Rectangle.JS::第34行”

< >从JavaScript到C++方法失败的调用是在代码34 > Media/JS/Cabase/Langel.js<代码>的第二行。这是你的密码。但是,这不是您引用的代码,但是我们可以通过查看失败的访问器的代码来找出错误:


您还需要更改所有呼叫者以匹配。我不能保证这会起作用,但这是我能想到的最合理的事情。

什么是“用于口腔”呢?(你是说“循环”吗?)是的,对不起。。。我不是英国人。我会编辑这篇文章来更正它。我没想到会有这么大的答案。哈哈,我会看看这个文件,看看我是否能看到其中的任何东西,并找出它是如何失败的。如果我发现了什么或者没有,我会告诉你的,谢谢你;)顺便说一句,我在问题中说,它不仅在lineWidth函数中失败,这也是我没有发布代码的原因。有时它在任何地方都会失败,主要是在getContext行中。好的,查看了整个函数,我无法确定它来自何处。奇怪的是,通过一些元素,它可以正常工作。超过10个,不是一个特殊的数字,不是。但只是有时候。也许这只是一个浏览器错误,但有太多的代码要看。我添加了一些东西来尝试。我不能保证这就是问题所在,但它有很好的工作机会。也不工作。我也认为这是因为它没有足够的时间去发现新元素或类似的东西,但事实似乎并非如此。我还尝试重用已经存在的画布元素,但没有成功。我想我会停止担心,使用chrome Lol。在启用硬件加速的Windows上,如果画布大于GPU上的纹理大小,则Resurface最有可能失败。如果你在窗户上,你的画布有多大?
nsresult
nsCanvasRenderingContext2D::GetLineWidth(float *width)
{
    if (!EnsureSurface())
        return NS_ERROR_FAILURE;

    gfxFloat d = mThebes->CurrentLineWidth();
    *width = static_cast<float>(d);
    return NS_OK;
}
function addCanvas(id, continuation) {
    if (document.getElementById(id) === null) {
        $('#content').append(
            '<canvas id="' + id + '" width="' + workAreaWidth +'" height="' 
            + workAreaHeight + '"></canvas>'
        );
    }

    setTimeout(function() {
        var canvas = document.getElementById(id).getContext('2d');
        canvas.setTransform(1, 0, 0, 1, 0, 0);
        canvas.clearRect(0, 0, workAreaWidth, workAreaHeight);
        continuation(canvas);
    }, 0);
}