2012-12-03 96 views
1

我得到了一個HTML5元素的問題getImageData() 我在網站上使用wScratchPad作爲臨時工具,並使用wScratchPad中的百分比函數來確定何時刪除覆蓋。它在IE9,Safari & Chrome上運行良好。但它會在Firefox中引發安全錯誤。getimagedata不工作在Firefox中

我在Chrome和IE9中也遇到了同樣的問題,但是通過將JS,Images和HTML移動到同一臺服務器來修復它。

我知道它會拋出一個錯誤,如果JS和Canvas圖像的域不在同一個域中,所以我檢查了圖像和js的document.domain。它看起來像JS是'document.domain = domain.com',圖像是document.domain = www.domain.com。

這可能是問題嗎?如果是這樣,我該如何解決它? 我已經看到了一種方法來覆蓋瀏覽器,以獲取腳本的用戶確認提醒,但看到這是一個高調的網站,這是不可能的。

低於wScratchPad的代碼導致錯誤:

scratchPercentage: function($this) 
{ 
    var hits = 0; 
    var imageData = $this.ctx.getImageData(0,0,$this.canvas.width,$this.canvas.height) 

    for(var i=0, ii=imageData.data.length; i<ii; i=i+4) 
    { 
     if(imageData.data[i] == 0 && imageData.data[i+1] == 0 && imageData.data[i+2] == 0 && imageData.data[i+3] == 0) hits++; 
    } 

    return (hits/$this.pixels) * 100; 
}, 
+0

我認爲這是你要找的東西:http://stackoverflow.com/a/366493/1438733 – Eric

+0

不幸的是,它在控制檯中拋出和錯誤,並沒有幫助解決在Firefox中的問題 – user1873378

回答

0

是的,你的問題是,頁面和圖像都沒有同源。

解決此問題的方法是從www.domain.com加載頁面,就像圖像一樣,或讓服務器將適當的CORS標頭與圖像一起發送。

我很驚訝你說它適用於其他瀏覽器。你可能在www.domain.com上加載了那些頁面?

+0

是的我加載頁面低谷www.domain但如果我檢查document.domain它是'domain.com'的圖像和頁面在同一個服務器和域,不同之處在於圖像的document.domain有'www.domain.com '而不是'domain.com'不像頁面本身 – user1873378

+0

@ user1873378哦?您的腳本是否在某處設置了「document.domain」爲「domain.com」?你正在測試什麼版本的Firefox? Firefox 18和更高版本將忽略用於drawImage安全檢查的「document.domain」,但舊版本確實認爲它... –