2011-07-27 56 views
11

我的問題:組件返回故障代碼: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] 

其產生這種行爲的代碼(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的日誌),然後消失了好幾次。
代碼片段連續被調用幾次,所以我看不到圖像是否在拋出錯誤時實際顯示。
rect。*中的值是浮點數,例如{x:-1500,y:-2500,h:1000,w:1000}

您是否對此錯誤的來源有所瞭解?

編輯1

此代碼產生錯誤(你需要有一個圖像在同一目錄

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

它似乎與一個事實,即空名爲「test.png」像有 「」 一個src禮。是否總是如此?

編輯2

事實上,對於錯誤報告,這個JavaScript就足夠了(如果我的理解):

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

回答

12

你得到這種從Firefox無益的錯誤信息時,DOM API調用拋出一個JavaScript異常,是不是抓住。實現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行的評論,這似乎誤解了規範說明的內容。)請構建一個完整的自包含測試用例來證明問題,然後我將很樂意幫助您提交錯誤報告。

+1

添加了一個代碼產生的錯誤,我發現我的代碼出現問題(測試null而不是「」),如果你仍然認爲這是一個錯誤,我會很樂意幫助你正確地發信號(I恐怕HTML引用對我來說有點太模糊了)。 –

+2

看起來這是一個已知的舊bug:https://bugzilla.mozilla.org/show_bug.cgi?id=405761我添加了較短的測試用例。 – zwol