Uncaught Error: SECURITY_ERR: DOM Exception 18 เมื่อฉันพยายามตั้งค่าคุกกี้


121

ฉันได้รับข้อผิดพลาดต่อไปนี้ในหน้าต่างเครื่องมือสำหรับนักพัฒนาของ Chrome เมื่อฉันพยายามตั้งค่าคุกกี้โดยใช้ปลั๊กอิน jQuery นี้ :

Uncaught Error: SECURITY_ERR: DOM Exception 18

ข้อผิดพลาดนี้หมายความว่าอย่างไรและฉันจะแก้ไขได้อย่างไร ฉันได้รับข้อผิดพลาดเดียวกันเมื่อฉันใช้นี้ปลั๊กอิน jQuery


หากปัญหาของคุณเกี่ยวข้องกับแคนวาส นี่คือคำตอบstackoverflow.com/questions/2390232/…
jose920405

คำตอบ:


151

คุณมักจะใช้สิ่งนี้กับไฟล์ในเครื่องในfile://รูปแบบ URI ซึ่งไม่สามารถตั้งค่าคุกกี้ได้ วางไว้บนเซิร์ฟเวอร์ภายในเพื่อให้คุณสามารถใช้งานhttp://localhostได้


26
ยังเกิดขึ้นสำหรับฉันโดยใช้ getImageData () บนผืนผ้าใบเมื่อโหลดจากไฟล์: //
Timmmm

6
การโทรที่ดียังเกิดขึ้นเมื่อเรียก getImageData () สำหรับรูปภาพที่โหลดจากโฮสต์อื่น การย้ายไฟล์ไปยังโดเมน / โปรโตคอล / ฯลฯ เดียวกัน แก้ไขได้
mike clagg

28
Pro เคล็ดลับ: ถ้าคุณมีติดตั้ง Python เพียงแค่พิมพ์python -m SimpleHTTPServerในไดเรกทอรีรากของเว็บไซต์ของคุณและพบว่ามันเจ้าภาพที่localhost: 8000
Thomas

5
สำหรับ Python 3 เพื่อให้ได้เอฟเฟกต์แบบเดียวกันคุณต้องทำpython -m http.server 8000
Kat

2
หากคุณเป็นนักพัฒนา iOS คุณอาจสนใจที่จะรู้ว่าฉันประสบปัญหานี้เช่นกันขณะพยายามใช้ localStorage หลังจากโหลด HTML ลงในตัวควบคุม UIWebView โดยตรง stackoverflow.com/questions/11371441/…
Felipe Sabino

18

ฉันยังมีปัญหานี้ในขณะที่พัฒนาบน HTML5 ในท้องถิ่น ฉันมีปัญหาเกี่ยวกับรูปภาพและฟังก์ชัน getImageData ในที่สุดฉันก็ค้นพบว่ามีใครสามารถเปิด Chrome ด้วยสวิตช์คำสั่ง --allow-file-access-from-file ซึ่งกำจัดความปลอดภัยในการป้องกันนี้ สิ่งเดียวคือมันทำให้เบราว์เซอร์ของคุณปลอดภัยน้อยลงและคุณไม่สามารถมีอินสแตนซ์ Chrome หนึ่งรายการที่เปิดสถานะและอีกรายการหนึ่งที่ไม่มีการตั้งค่าสถานะ


4
เมื่อคุณใช้ --allow-file-access-from-files (สังเกตว่าตอนนี้เป็นพหูพจน์) คุณต้องจำไว้ว่าสวิตช์จะมีผลก็ต่อเมื่อไม่มีอินสแตนซ์อื่น ๆ ของ Chrome ที่ทำงานอยู่แล้ว
BlueMonkMN

11

คุณยังสามารถ "แก้ไข" สิ่งนี้ได้โดยการแทนที่รูปภาพด้วยการแทนค่า Base64 แบบอินไลน์:

img.src= "data:image/gif;base64,R0lGODlhCwALAIAAAAAA3pn/ZiH5BAEAAAEALAAAAAALAAsAAAIUhA+hkcuO4lmNVindo7qyrIXiGBYAOw==";
มีประโยชน์เมื่อคุณไม่ได้ตั้งใจที่จะเผยแพร่เพจบนเว็บ แต่ให้ใช้บนเครื่องในระบบเท่านั้น


4
มีความคิดอย่างไรในการรับฐาน 64 แทนผืนผ้าใบในลักษณะที่ไม่ทำให้เกิดข้อผิดพลาดนี้
devios1

var canvas = document.createElement ("ผ้าใบ"); 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); ส่งคืน ctx.getImageData (0, 0, 128, 128);
Ray Hulha

10

ต้องเผชิญกับสถานการณ์เดียวกันกับการเล่นกับ Javascript . น่าเสียดายที่ Chrome ไม่อนุญาตให้เข้าถึงคนงานจาวาสคริปต์ที่เก็บไว้ในไฟล์ในเครื่อง

วิธีแก้ปัญหาประเภทหนึ่งด้านล่างโดยใช้ที่เก็บข้อมูลในเครื่องคือการเรียกใช้ Chrome ด้วย--allow-file-access-from-files(ที่มีsส่วนท้าย) แต่อนุญาตให้ใช้ Chrome เพียงอินสแตนซ์เดียวซึ่งไม่สะดวกสำหรับฉัน ด้วยเหตุนี้ฉันจึงใช้ Chrome Canary โดยอนุญาตให้เข้าถึงไฟล์ได้

BTW ใน Firefox ไม่มีปัญหาดังกล่าว


ฉันหวังว่าฉันจะโหวตได้มากกว่าหนึ่งครั้ง คำตอบของคุณช่วยให้ฉันประหยัดเวลาได้หลายเท่ากระแทกหัวกับหน้าจอ !! ขอบคุณมาก !!
Jaime

@Jaime my pleasure;)
Endre Simo

5

ข้อผิดพลาดนี้จะปรากฏขึ้นหากคุณพยายามสร้างผู้ปฏิบัติงานบนเว็บด้วยโครงร่าง URI ข้อมูล

var w = new Worker('data:text/javascript;charset=utf-8,onmessage%20%3D%20function()%20%7B%20postMessage(%22pong%22)%3B%20%7D'); w.postMessage('ping');

ไม่อนุญาตตามมาตรฐาน: http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html#dom-worker


4

ฉันมีปัญหานี้เมื่อใช้ API ประวัติ

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

แม้จะมีเซิร์ฟเวอร์ภายใน (localhost) คุณก็ยังต้องการเพิ่ม "http: //" ให้กับ URL ของคุณเพื่อให้คุณมีสิ่งที่คล้ายกับ:

http://localhost...

3

ฉันไม่มีความสุขกับการ--allow-file-access-from-filesแก้ปัญหาอย่างสมบูรณ์เพราะฉันใช้ Chrome เป็นเบราว์เซอร์หลักและไม่พอใจกับการละเมิดนี้ที่ฉันเปิด

ตอนนี้ฉันใช้ Canary (เวอร์ชันโครเมี่ยมเบต้า) สำหรับการพัฒนาของฉันโดยเปิดสถานะ และเป็นเวอร์ชัน Chrome สำหรับบล็อกจริงของฉัน: เบราว์เซอร์สองตัวไม่แชร์ค่าสถานะ!


1
สำหรับคนที่คุณอยากรู้อยากเห็นตอนนี้ - อนุญาตให้เข้าถึงไฟล์จากไฟล์ (พร้อม s)
Shane Reustle

2

นอกจากนี้ยังสามารถรับข้อผิดพลาดนี้ได้หากใช้คุณลักษณะการแจ้งเตือนใหม่ (จนถึงขณะนี้ webkit เท่านั้น) ก่อนได้รับอนุญาต

วิ่งครั้งแรก:

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

เรียกใช้ภายหลัง:

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

ฟังก์ชันการขออนุญาตจำเป็นต้องถูกทริกเกอร์จากเหตุการณ์ที่เกิดจากผู้ใช้มิฉะนั้นจะไม่แสดง


1

ฉันได้รับข้อผิดพลาดนั้นในซาฟารีมือถือเมื่อใช้ ASP.NET MVC เพื่อส่งคืน FileResult พร้อมกับโอเวอร์โหลดที่ส่งคืนไฟล์ที่มีชื่อไฟล์ต่างจากต้นฉบับ ดังนั้น,

return File(returnFilePath, contentType, fileName);

จะให้ข้อผิดพลาดในซาฟารีมือถือโดยที่

return File(returnFilePath, contentType);

จะไม่

ฉันจำไม่ได้ด้วยซ้ำว่าทำไมฉันถึงคิดว่าสิ่งที่ฉันทำนั้นเป็นความคิดที่ดี พยายามที่จะฉลาดฉันเดา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.