2013-06-11 22 views
19

我遇到問題。我正在嘗試在畫布上繪製圖像。該圖像不是來自HTML頁面,而是來自文件。這裏是我使用的代碼:NS_ERROR_NOT_AVAILABLE:組件不可用

var img = new Image(); 
img.src = "/images/logo.jpg"; 
this._canvas.drawImage(img, 300, 300);// this is line 14 

現在,這是問題所在。這似乎不適用於Firefox和IE10(我還沒有在其他瀏覽器上測試過)。在Firefox(21)我得到:

[19:09:02.976] NS_ERROR_NOT_AVAILABLE: Component is not available @ file:///D:/Watermellon/scripts/base-classes.js:14 

和IE10我得到:

SCRIPT16389: Unspecified error. 
base-classes.js, line 14 character 13 

的文件及其目錄是:

root/index.html 
root/scripts/base-classes.js 
root/images/logo.jpg 

現在,當我改變img.src到一個網址(來自另一個網站的圖片),一切正常,圖片在延遲後自動繪製(因爲它是從網址獲得的)。我究竟做錯了什麼?

回答

22

我猜問題是,圖像尚未加載,可以嘗試使用它之前。試試這個:

var img = new Image(); 
img.onload = function() { 
    this._canvas.drawImage(img, 300, 300);// this is line 14 
}; 
img.src = "images/logo.jpg"; 

src屬性後置結合的事件,因爲緩存圖像的load事件立即觸發(這是在IE中一個常見的問題)。

,並根據您的結構,路徑圖像很可能是images/logo.jpg(除去第一/),我想在這裏

+1

@MarioStoilov然後,這意味着它沒有找到圖像。所以這實際上並沒有解決問題,它只是設置它正常工作。嘗試使用'img.src =「images/logo.jpg」;' - 注意'/'我在字符串的開頭省略了 – Ian

+1

是的,我有點注意到了,但是在回答之前刪除了我的評論:/。 Thx無論如何 –

+2

你好,我有代碼相同的問題,但錯誤只在Firefox瀏覽器。在其他所有瀏覽器中工作。 Firefox有沒有特殊情況?我試過這段代碼,但仍沒有得到任何結果。如果可能的話,請幫助我。 – 2014-02-28 14:17:23

4

你需要等待圖像以試圖將其拉入畫布前加載:

var img = new Image(); 
img.src = "/images/logo.jpg"; 
img.onload = function() { 
    this._canvas.drawImage(img, 300, 300);// this is line 14 
} 
0

的問題,是當資源可用?,但有一種方法來確認資源是可用的,只需檢查圖像對象的'完整'屬性。

if (img.complete == true){ 
    // is available. 
} else { 
    // wait until is ready. 
} 

此外,您可以使用onload事件和檢查兩個東西的延遲方法進行合併方法。

var img = new Image(); 
//first attach handler 
img.onload = function(e){ 
    if (e.target.complete == true) { 
      yourHandler(e); 
     } else {    
      var maxTimes = 10; 
      var countTimes = 0; 
      function retryLoadImage() { 
       setTimeout(function() { 
        if (countTimes > maxTimes) { 
         // -- cannot load image. 
         return; 
        } else { 
         if (e.target.complete == true) { 
          yourHandler(e); 
         } else { 
          retryLoadImage(); 
         } 
        } 
        countTimes++; 
       }, 50); 
      }; 
     } 
}; 
img.src = yourSource; 

這對我有用!!!在IE和FF上。