1

HTML5 要素 getImageData() で問題が発生しました。Web サイトのスクラッチ ツールに wScratchPad を使用し、wScratchPad のパーセンテージ関数を使用してオーバーレイを削除するタイミングを決定しています。IE9、Safari、Chrome で問題なく動作しています。しかし、Firefox では SECURITY ERROR がスローされます。

ChromeとIE9でも同じ問題がありましたが、JS、画像、HTMLを同じサーバーに移動することで修正しました。

JS とキャンバス イメージのドメインが同じドメインにない場合、エラーがスローされることがわかっているので、イメージと js の両方の document.domain を確認しました。「document.domain = domain.com」として JS のように見え、画像には document.domain = www.domain.com があります。

それが問題でしょうか?もしそうなら、どうすれば修正できますか?ブラウザをオーバーライドしてスクリプトのユーザー確認のアラートを受け取る方法は既に見ましたが、これは知名度の高い Web サイトであるため、これは問題外です。

エラーの原因となる 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;
},
4

1 に答える 1

0

はい、あなたの問題は、ページと画像が同じ起源ではないことです。

これを修正する方法は、画像と同じように www.domain.com からページをロードするか、サーバーに画像とともに適切な CORS ヘッダーを送信させることです。

他のブラウザでも動作するということに驚きました。おそらくそれらの www.domain.com からページをロードしましたか?

于 2012-12-04T05:54:19.060 に答える