ホームページ  >  記事  >  ウェブフロントエンド  >  異なるオリジンから画像を描画するときに「canvas.toDataURL()」が「SECURITY_ERR」をスローするのはなぜですか?

異なるオリジンから画像を描画するときに「canvas.toDataURL()」が「SECURITY_ERR」をスローするのはなぜですか?

DDD
DDDオリジナル
2024-10-31 22:32:28528ブラウズ

Why does `canvas.toDataURL()` throw a `SECURITY_ERR` when drawing images from a different origin?

'canvas.toDataURL()' のセキュリティ例外を理解する

次のコードを考えてみましょう:

<pre class="brush:php;toolbar:false">
var frame=document.getElementById("viewer");
frame.width=100;
frame.height=100;

var ctx=frame.getContext("2d");
var img=new Image();
img.src="http://www.ansearch.com/images/interface/item/small/image.png"

img.onload=function() {
    // draw image
    ctx.drawImage(img, 0, 0)

    // Here's where the error happens:
    window.open(frame.toDataURL("image/png"));
}

このコードは、「toDataURL()」メソッドを使用して、キャンバス要素をデータ URL に変換しようとします。ただし、これにより「SECURITY_ERR: DOM Exception 18」エラーが発生します。

このエラーの原因は、Web ブラウザーによって課されるセキュリティ制限にあります。 HTML Canvas の仕様によれば、キャンバスに描画されている画像が別のソース (この場合は「http://www.ansearch.com」) から提供されている場合、ブラウザはキャンバスを次の形式に変換できません。データ URL。これは、クロスオリジンのデータ アクセスと潜在的なセキュリティ脆弱性を防ぐために行われます。

したがって、異なるオリジンの画像を含むキャンバス要素からデータ URL を生成しようとすると、このセキュリティに遭遇することになります。例外。この問題を解決するには、画像が Web アプリケーションと同じオリジンから提供されていることを確認するか、画像変換の代替方法を検討する必要があります。

以上が異なるオリジンから画像を描画するときに「canvas.toDataURL()」が「SECURITY_ERR」をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。