Selesaikan ralat getImageData(): kanvas dicemari oleh data merentas domain
P粉343141633
2023-08-29 12:52:11
<p>Kod saya berfungsi dengan baik pada localhost tetapi tidak pada tapak web. </p>
<p>Saya mendapat ralat ini daripada konsol, untuk baris ini <kod>.getImageData(x,y,1,1).data</code>:</p>
<pre class="brush:php;toolbar:false;">Uncaught SecurityError: Gagal melaksanakan 'getImageData' pada 'CanvasRenderingContext2D': Kanvas telah dicemari oleh data silang asal.</pre>
<p>Sebahagian daripada kod saya:</p>
<pre class="brush:php;toolbar:false;">jQuery.Event.prototype.rgb=function(){
var x = this.offsetX ||. (this.pageX - $(this.target).offset().left),y = this.offsetY || (this.pageY - $(this.target).offset(). atas);
jika (this.target.nodeName!=="CANVAS")mengembalikan null;
kembalikan this.target.getContext('2d').getImageData(x,y,1,1).data;
}</pre>
<p><strong>Nota: </strong>URL imej saya (src) berasal daripada URL subdomain</p>
Seperti yang orang lain katakan, anda "mencemarkan" kanvas dengan memuatkan daripada domain silang asal.
https://developer.mozilla.org/en-US/docs/ HTML/CORS_Enabled_Image
Namun, anda boleh mencegah perkara ini dengan hanya menetapkan:
Ini hanya berfungsi jika pelayan jauh menetapkan pengepala berikut dengan betul:
Pemilih fail Dropbox apabila menggunakan pilihan Pautan TerusIni adalah contoh yang bagus. Saya menggunakan ini di oddprints.com untuk menyedut imej daripada URL imej dropbox jauh ke dalam kanvas saya dan kemudian menyerahkan kembali data imej ke pelayan saya. Semua ditulis dalam JavaScript