2014-11-01 77 views
5

我得到這個錯誤在Chrome和Opera瀏覽器:未捕獲的SecurityError:無法執行對「CanvasRenderingContext2D」 getImageData「:畫布已經跨域數據污染

Uncaught SecurityError: Failed to execute 'getImageData' on 'CanvasRenderingContext2D': The canvas has been tainted by cross-origin data. 

代碼工作正常在Internet Explorer,Mozilla Firefox和Safari中。但我需要在Chrome和Opera中修復它。請幫我找到一個解決方案來解決這個問題?

我在這行

imgData = ctx.getImageData(x1,y1,w,h); 
+1

可能重複[getImageData()錯誤畫布已被交叉來源數據污染](http://stackoverflow.com/questions/22097747/getimagedata-error-畫布已被污染的交叉來源數據) – 2016-01-21 11:34:29

回答

11

得到這個錯誤可能是這將幫助,正如你所提到的跨起源所以試試這個,

var UimageObj = new Image(); 

crossOrigin必須被設置爲啓用畫布數據將被保存。源圖像應該有access-control-allow-origin設置爲*或選定的域

UimageObj.crossOrigin = 'anonymous'; // crossOrigin attribute has to be set before setting src.If reversed, it wont work. 
UimageObj.src = obj_data.srcUser; 

希望它有幫助。

+1

「crossOrigin屬性必須在設置src之前設置。如果反轉,它不會工作。」這很重要,謝謝! – Voles 2016-09-16 08:32:13

1

當您使用從磁盤加載HTML文件:file://path/to/your/file.html,那麼谷歌Chrome和Opera將在行引發錯誤包括:imgData = ctx.getImageData(x1,y1,w,h);

解決方法很簡單:啓動Web服務器(Apache時,Nginx的)地方把你的HTML文件在網絡服務器和加載您的HTML文件從:http://localhost/somewhere/file.html

相關問題