2016-02-13 44 views
0

我有一個JSON字符串,如下所示,它包含圖像的路徑。在服務器將URL從URL存儲到localstorage

"send-sms":{ 
    "menu_name":"Send", 
    "menu_icon":"http:\/\/example.com\/mob\/media\/com_abcd\/icons\/send.png" 
} 

圖像存在這是我的元

<meta http-equiv="Content-Security-Policy" 
     content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data: http://example.com"> 

我想將圖像存儲到本地會話。我使用下面的Javascipt來傳遞完整圖片的URL。它總是返回null。

function getImageData(imgpath){ 
    var img = new Image(); 
    img.src = imgpath; 
    var data = null; 

    img.load = function() { 
     var canvas = document.createElement('canvas'); 
     document.body.appendChild(canvas); 
     var context = canvas.getContext('2d'); 
     context.drawImage(img, 0, 0); 
     data = context.getImageData(x, y, img.width, img.height).data; 
     console.log(data); 
     localStorage.setItem('mysession_imag', data); 
    }; 

} 
+0

這是一個異步問題。將'setItem'調用放入您的'img.load'回調中。不過,您可能會在稍後遇到此其他問題:[Cross Domain Images and the Tainted Canvas](http://blog.codepen.io/2013/10/08/cross-domain-images-tainted-canvas/) – apsillers

+0

@ apsillers我把'setItem'移到了load中。我也用我的元更新了這個問題。我得到了'undefined'的圖片... – Malaiselvan

回答

1

請記住,您有一個async調用。

該代碼將在我在評論中提到的步驟中運行。

總之,您正在創建第二個變量,也稱爲data,然後無所作爲。

function getImageData(imgpath){ 
    var img = new Image(); 
    img.src = imgpath; 

    // Step 1: Yes, data is `null`. You are setting it that way. 
    data = null; 

    img.load = function() { 
     var canvas = document.createElement('canvas'); 
     document.body.appendChild(canvas); 
     var context = canvas.getContext('2d'); 
     context.drawImage(img, 0, 0); 

     // Step 3: You are creating a NEW data variable 
     var data = context.getImageData(x, y, img.width, img.height).data; 

     // Step 4: And doing nothing with it. 
    }; 

    // Step 2: You are storing the `null` from step 1 
    localStorage.setItem('mysession_imag', data); 
} 
+0

感謝您指出'data'。我更新了我的問題,仍然數據爲空。 – Malaiselvan

+0

注意ORDER步驟運行它。您在第3步運行之前通過'localStorage'設置數據。 –

+0

ahhh ..好的。我在加載函數中移動了'localStorage'。不確定我是否可以執行'console.log',但是當我執行'console.log'時,它會返回'undefined' ... – Malaiselvan