canvas的getImageData跨域問題解決方法


一、問題描述

  在使用html5的canvas時,當用到getImageData方法獲取圖片信息時,會碰到跨域無法獲取的情況,代碼截圖如下:

  我分別使用chrome瀏覽器和360極速瀏覽器運行,控制圖提示,截圖如下:

二、出現問題的原因

  圖片存儲在本地時,是默認沒有域名的,用getImageData方法時,瀏覽器會判定為跨域而報錯!

  摘了一段網上的解析:

1、首先沒有服務器環境(如:本地的 html網頁,操作本地的圖片),
    就會報"Unable to get image data from canvas because the canvas has been tainted by cross-origin data"錯誤。
    因為本地測試用的圖片是文件夾內的,js跨域限制是不能獲取非同一域名下的數據的,
    而本地的位置是沒有域名的,所以瀏覽器都認為你是跨域,導致報錯。
2、為了阻止欺騙,瀏覽器會追蹤 image data。
   當把一個和canvas的域不同的圖片放到canvas上,這個canvas就成為 “tainted”(被污染的),瀏覽器就不讓你操作該canvas 的任何像素。
   是為了阻止多種類型的XSS/CSRF攻擊(兩種典型的跨站攻擊)。

三、網絡上提供的幾種解決方法:

  1、把圖片放置在服務器中,通過服務器返回給客戶端。百度搜索wamp下載安裝,按照百度經驗的步驟即可。(以前安裝過,這次沒有用這方法,主要是我懶)

  2、 設置chrome瀏覽器屬性,在目標中添加上--disable-web-security就可以了(注意:中間有一個空格),重新打開瀏覽器。--disable-web-security這一句可以用--allow-file-acess-from-files替換

    這個方法,親測無效,我也沒搞清楚為什么。如果有知道的,可以在下面給我留言或私信我,謝謝。

  3、將圖片轉換成為字符串保存在瀏覽器,使用時再轉換回去有興趣參考(http://blog.csdn.net/molaifeng/article/details/42293509

  4、用firefox瀏覽器打開;(簡單快捷!火狐瀏覽器,建議測試使用)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM