大多數(shù)開發(fā)者都會(huì)合法 使用像素?cái)?shù)據(jù)操作。盡管如此,還是會(huì)有人出于某些邪惡的目的利用這種從canvas直接獲取并 且修改數(shù)據(jù)的能力。出于這個(gè)原因,origin-clean canvas的概念應(yīng)運(yùn)而生,換句話說,如果canvas 中的圖片并非來自包含它的頁面所在的域,頁面中的腳本將不能取得其中的數(shù)據(jù).
如下圖所示,如果來自http://www.example.com的頁面包含canvas元素,那么頁面中的 代碼完全有可能在canvas里面呈現(xiàn)來自http://www.remotexom的圖片。畢竟在任何Web頁面中 顯示其他遠(yuǎn)程網(wǎng)站的圖片都是完全可接受的。
然而,在沒有Canvas API以前,無法使用編程的方式獲取下載圖片的像素信息。來自其他 網(wǎng)站的私有圖片可以顯示在本地,但無法被讀取或者復(fù)制。如果允許腳本讀取本地之外的圖像數(shù) 據(jù),那么整個(gè)網(wǎng)絡(luò)中的用戶照片以及其他敏感的在線圖片文檔將被“無限制地共享”。
為了避免如此,在getlmageData函數(shù)被調(diào)用的時(shí)候,如果canvas中的圖像來自其他域,就 會(huì)拋出安全異常。這樣的話,只要不獲取顯示著其他域中圖片的canvas的數(shù)據(jù),那么就可以隨 意呈現(xiàn)這些遠(yuǎn)程圖片。在開發(fā)的過程中要注意這個(gè)限制條件,使用安全的渲染方式。