Kesalahan Tidak Tertangkap: SECURITY_ERR: DOM Pengecualian 18 ketika saya mencoba menyetel cookie

121

Saya mendapatkan kesalahan berikut di jendela alat pengembang Chrome ketika saya mencoba mengatur cookie menggunakan plugin jQuery ini :

Kesalahan Tidak Tertangkap: SECURITY_ERR: DOM Pengecualian 18

Apa arti kesalahan ini dan bagaimana cara memperbaikinya? Saya mendapatkan kesalahan yang sama ketika saya menggunakan plugin jQuery ini .

Pieter
sumber
Jika masalah Anda terkait dengan kanvas. Ini adalah jawaban stackoverflow.com/questions/2390232/…
jose920405

Jawaban:

151

Anda kemungkinan besar menggunakan ini pada file lokal melalui file://skema URI, yang tidak dapat menyetel cookie. Taruh di server lokal agar bisa digunakan http://localhost.

Eli Grey
sumber
26
Juga terjadi pada saya menggunakan getImageData () pada kanvas ketika dimuat dari file: //.
Timmmm
6
Panggilan yang bagus, juga terjadi saat memanggil getImageData () untuk gambar yang dimuat dari host lain. Memindahkan file ke domain / protokol / dll yang sama. memperbaikinya.
mike clagg
28
Tip pro: jika Anda menginstal Python, cukup ketik python -m SimpleHTTPServerdirektori root situs Anda, dan temukan itu di-host di localhost: 8000 .
Thomas
5
Untuk Python 3, untuk mendapatkan efek yang sama yang perlu Anda lakukanpython -m http.server 8000
Kat
2
Jika Anda adalah pengembang iOS, Anda mungkin tertarik untuk mengetahui bahwa saya juga mengalami masalah ini saat mencoba menggunakan localStorage setelah memuat HTML langsung ke kontrol UIWebView. stackoverflow.com/questions/11371441/…
Felipe Sabino
18

Saya juga mengalami masalah ini saat mengembangkan HTML5 secara lokal. Saya memiliki masalah dengan gambar dan fungsi getImageData. Akhirnya, saya menemukan seseorang dapat meluncurkan chrome dengan tombol perintah --allow-file-access-from-file, yang menghilangkan keamanan perlindungan ini. Satu-satunya hal adalah hal itu membuat browser Anda kurang aman, dan Anda tidak dapat memiliki satu instance chrome dengan flag aktif dan satu lagi tanpa flag.

alokal
sumber
4
Saat Anda menggunakan --allow-file-access-from-files (perhatikan sekarang jamak) Anda harus ingat bahwa peralihan hanya berlaku jika tidak ada contoh Chrome lain yang sudah berjalan.
BlueMonkMN
11

Anda juga dapat "memperbaiki" ini dengan mengganti gambar dengan representasi Base64 sebarisnya:

img.src= "data:image/gif;base64,R0lGODlhCwALAIAAAAAA3pn/ZiH5BAEAAAEALAAAAAALAAsAAAIUhA+hkcuO4lmNVindo7qyrIXiGBYAOw==";
Berguna, jika Anda tidak bermaksud untuk mempublikasikan halaman tersebut di web, tetapi menggunakannya hanya di mesin lokal.

Ibolit
sumber
4
Adakah ide untuk mendapatkan representasi base64 dari kanvas sedemikian rupa sehingga tidak menimbulkan kesalahan ini?
devios1
var canvas = document.createElement ("canvas"); canvas.width = 128; canvas.height = 128; var ctx = canvas.getContext ('2d'); ctx.fillRect (25,25,100,100); ctx.clearRect (45,45,60,60); ctx.strokeRect (50,50,50,50); return ctx.getImageData (0, 0, 128, 128);
Ray Hulha
10

Menghadapi situasi yang sama bermain dengan Javascript . Sayangnya Chrome tidak mengizinkan untuk mengakses pekerja javascript yang disimpan dalam file lokal.

Satu jenis solusi di bawah ini menggunakan penyimpanan lokal adalah menjalankan Chrome dengan --allow-file-access-from-files(dengan sdi bagian akhir), tetapi hanya satu contoh Chrome yang diizinkan, yang tidak terlalu nyaman bagi saya. Untuk alasan ini saya menggunakan Chrome Canary, dengan akses file diizinkan.

BTW di Firefox tidak ada masalah seperti itu.

Endre Simo
sumber
Saya berharap saya bisa memberi suara positif lebih dari sekali. Jawaban Anda baru saja menyelamatkan saya BANYAK waktu membenturkan kepala saya ke layar !! Banyak, banyak terima kasih !!
Jaime
@ Jaime my kesenangan;)
Endre Simo
4

Saya mengalami masalah ini saat menggunakan API riwayat.

window.history.pushState(null, null, URL);

Bahkan dengan server lokal (localhost), Anda ingin menambahkan 'http: //' ke URL Anda sehingga Anda memiliki sesuatu yang mirip dengan:

http://localhost...
Mr_Pouet
sumber
3

Saya tidak sepenuhnya senang dengan --allow-file-access-from-filessolusinya, karena saya menggunakan Chrome sebagai browser utama saya, dan tidak terlalu senang dengan pelanggaran yang saya buka.

Sekarang saya menggunakan Canary (versi chrome beta) untuk pengembangan saya dengan flag aktif. Dan hanya versi Chrome untuk blog saya yang sebenarnya: kedua browser tidak berbagi bendera!

alokal
sumber
1
Bagi Anda yang penasaran, sekarang --allow-file-access-from-files (dengan s)
Shane Reustle
2

Seseorang juga dapat menerima kesalahan ini jika menggunakan fitur pemberitahuan baru (sejauh ini hanya webkit) sebelum mendapatkan izin.

Lari pertama:

<!-- Get permission -->
<button onclick="webkitNotifications.requestPermission();">Enable Notifications</button>

Jalankan nanti:

// Display Notification:
window.webkitNotifications.createNotification('image', 'Title', 'Body').show();

Fungsi izin permintaan harus dipicu dari acara yang disebabkan oleh pengguna, jika tidak maka tidak akan ditampilkan.

Thomas Hunter II
sumber
1

Saya telah mendapatkan kesalahan itu di safari seluler saat menggunakan ASP.NET MVC untuk mengembalikan FileResult dengan kelebihan beban yang mengembalikan file dengan nama file yang berbeda dari aslinya. Begitu,

return File(returnFilePath, contentType, fileName);

akan memberikan kesalahan dalam safari seluler, sedangkan

return File(returnFilePath, contentType);

tidak akan.

Saya bahkan tidak ingat mengapa saya pikir apa yang saya lakukan adalah ide yang bagus. Saya rasa mencoba untuk menjadi pintar.

pendatang baru
sumber