2013-01-15 108 views
5

我使用HTML5畫布和.toDataURL()函數通過KineticJS's.toDataURL()方法。畫布使用我的用戶上傳到網站的圖片,這些圖片存儲在不同的機器和子域farm1.domain.com中。canvas.toDataURL()導致安全錯誤

問題:.toDataURL()被調用時,我得到的錯誤

SECURITY_ERR: DOM Exception 18 

有沒有辦法解決?如果用戶通過domain.com訪問該頁面,並且圖像託管在www.domain.com,我也會遇到同樣的問題。

嘗試:

我添加以下行httpd.conf虛擬主機內並重新啓動Apache服務。

Header add Access-Control-Allow-Origin "http://www.domain.com" 
Header add Access-Control-Allow-Origin "http://domain.com" 
Header add Access-Control-Allow-Origin "http://farm1.domain.com" 

訪問來自頁domain.com託管在www.domain.com圖像時,我仍然得到同樣的錯誤! KineticJS有沒有解決這個問題的方法?

+0

可能重複:http://stackoverflow.com/questions/9344548/security-error-with-canvas-todataurl-and-drawimage?rq=1和http://stackoverflow.com/questions/2390232/ why-does-canvas-todataurl-throw-a-security-exception –

+0

重複並被回答,請看右欄中的相關內容,這裏是[spec](http://www.w3.org/TR/2011 /WD-html5-20110405/the-canvas-element.html#security-with-canvas-elements) – antejan

+0

我想origin-clean標誌必須設置爲true以避免錯誤?這可以在KineticJS中完成嗎? – Nyxynyx

回答

0

沒有辦法解決這個錯誤。從不同的域加載到畫布上的圖像會引發每個瀏覽器當前實現的錯誤。在你的情況下,圖像應該存儲在同一個域中,你不會得到異常。

+0

真的很奇怪,我無法將我的圖像存儲在其他服務器和CDN中,特別是當圖像數量不適合單個服務器時... – Nyxynyx

+0

@ Nyxynyx不幸的是,這是對canvas元素的安全限制。 –

1

您需要將Access-Control-Allow-Origin標題添加到要加載的圖像,而不是加載它們的頁面。有關此標題的詳細信息以及CORS的一般信息,您可能需要閱讀「CORS isn't just for XHR」,其中特別討論了此問題。