IE throws Security Error when calling toDataUrl on canvas

圖片存儲在本地時,是默認沒有域名的,用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攻擊(兩種典型的跨站攻擊)。

 

其他瀏覽器可以設置 cross-origin 屬性解決;

ie不支持,則通藉助ajax和URL.createObjectURL()方法曲線救國

或者使用第三方庫  canvg

 

參考 參考2 參考3 參考4

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章