一、問題描述
在使用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瀏覽器打開;(簡單快捷!火狐瀏覽器,建議測試使用)