Lỗi chưa xảy ra: SECURITY_ERR: DOM Exception 18 khi tôi cố gắng đặt cookie


121

Tôi gặp lỗi sau trong cửa sổ công cụ dành cho nhà phát triển của Chrome khi cố gắng đặt cookie bằng plugin jQuery này :

Lỗi chưa xảy ra: SECURITY_ERR: DOM Exception 18

Lỗi này có nghĩa là gì và làm thế nào tôi có thể sửa chữa nó? Tôi gặp lỗi tương tự khi sử dụng plugin jQuery này .


Nếu vấn đề của bạn liên quan đến canvas. Đây là câu trả lời stackoverflow.com/questions/2390232/...
jose920405

Câu trả lời:


151

Rất có thể bạn đang sử dụng điều này trên một tệp cục bộ qua file://lược đồ URI, không thể đặt cookie. Đặt nó trên một máy chủ cục bộ để bạn có thể sử dụng http://localhost.


26
Cũng xảy ra với tôi khi sử dụng getImageData () trên canvas khi được tải từ tệp: //.
Timmmm

6
Cuộc gọi tốt, cũng xảy ra khi gọi getImageData () cho một hình ảnh được tải từ một máy chủ lưu trữ khác. Di chuyển tệp sang cùng một miền / giao thức / v.v. sửa chữa nó.
mike clagg

28
Mẹo chuyên nghiệp: nếu bạn đã cài đặt Python, chỉ cần nhập python -m SimpleHTTPServerthư mục gốc của trang web của bạn và tìm nó được lưu trữ tại localhost: 8000 .
Thomas

5
Đối với Python 3, để có được hiệu ứng tương tự, bạn cần làmpython -m http.server 8000
Kat

2
Nếu bạn là nhà phát triển iOS, Bạn có thể muốn biết rằng tôi cũng gặp sự cố này khi cố gắng sử dụng localStorage sau khi tải HTML trực tiếp vào điều khiển UIWebView. stackoverflow.com/questions/11371441/…
Felipe Sabino,

18

Tôi cũng gặp sự cố này khi phát triển trên HTML5 tại địa phương. Tôi gặp sự cố với hình ảnh và chức năng getImageData. Cuối cùng, tôi phát hiện ra một người có thể khởi chạy chrome bằng nút chuyển lệnh --allow-file-access-from-file, loại bỏ tính năng bảo mật bảo vệ này. Điều duy nhất là nó làm cho trình duyệt của bạn kém an toàn hơn và bạn không thể có một phiên bản chrome có cờ và phiên bản khác không có cờ.


4
Khi bạn sử dụng --allow-file-access-from-files (lưu ý rằng nó bây giờ là số nhiều), bạn phải nhớ rằng công tắc chỉ có hiệu lực nếu không có bất kỳ phiên bản Chrome nào khác đang chạy.
BlueMonkMN

11

Bạn cũng có thể "sửa chữa" điều này bằng cách thay thế hình ảnh bằng biểu diễn Base64 nội tuyến của nó:

img.src= "data:image/gif;base64,R0lGODlhCwALAIAAAAAA3pn/ZiH5BAEAAAEALAAAAAALAAsAAAIUhA+hkcuO4lmNVindo7qyrIXiGBYAOw==";
Hữu ích, khi bạn không có ý định xuất bản trang trên web mà chỉ sử dụng nó trên các máy cục bộ.


4
Bất kỳ ý tưởng nào về cách lấy biểu diễn base64 của canvas theo cách mà nó không gây ra lỗi này?
defos1

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); trả về ctx.getImageData (0, 0, 128, 128);
Ray Hulha

10

Đối mặt với tình huống tương tự khi chơi với Javascript . Rất tiếc, Chrome không cho phép truy cập các trình xử lý javascript được lưu trữ trong tệp cục bộ.

Một cách giải quyết bên dưới khi sử dụng bộ nhớ cục bộ là chạy Chrome với --allow-file-access-from-files(with sat end), nhưng chỉ cho phép một phiên bản của Chrome, điều này không quá thuận tiện đối với tôi. Vì lý do này, tôi đang sử dụng Chrome Canary, được phép truy cập tệp.

BTW trong Firefox không có vấn đề như vậy.


Tôi ước tôi có thể ủng hộ nhiều hơn một lần. Câu trả lời của bạn vừa giúp tôi tiết kiệm HÀNG TẤN thời gian đập đầu vào màn hình !! Rất rất cảm ơn!!
Jaime

@Jaime niềm vui của tôi;)
Endre Simo


4

Tôi gặp sự cố này khi sử dụng API lịch sử.

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

Ngay cả với một máy chủ cục bộ (localhost), bạn muốn thêm 'http: //' vào URL của mình để bạn có một cái gì đó tương tự như:

http://localhost...

3

Tôi không hoàn toàn hài lòng với --allow-file-access-from-filesgiải pháp này, vì tôi đang sử dụng Chrome làm trình duyệt chính của mình và không thực sự hài lòng với vi phạm mà tôi đã mở.

Bây giờ tôi đang sử dụng Canary (phiên bản chrome beta) để phát triển với cờ đang bật. Và phiên bản Chrome đơn thuần cho việc viết blog thực sự của tôi: hai trình duyệt không dùng chung cờ!


1
Để những người bạn tò mò, nó bây giờ là --allow-file-access-từ-file (với một s)
Shane Reustle

2

Người ta cũng có thể nhận được lỗi này nếu sử dụng tính năng thông báo mới (chỉ dành cho webkit) trước khi được cấp phép.

Lần chạy đầu tiên:

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

Chạy sau:

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

Các chức năng quyền yêu cầu cần được kích hoạt từ một sự kiện do người dùng gây ra, nếu không, nó sẽ không được hiển thị.


1

Tôi đã gặp lỗi đó trong safari di động khi sử dụng ASP.NET MVC để trả về FileResult có quá tải trả về tệp có tên tệp khác với tên tệp gốc. Vì thế,

return File(returnFilePath, contentType, fileName);

sẽ đưa ra lỗi trong safari di động, trong đó

return File(returnFilePath, contentType);

không muốn.

Tôi thậm chí không nhớ tại sao tôi nghĩ những gì tôi đang làm là một ý tưởng hay. Tôi đoán là cố tỏ ra thông minh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.