Từ chối thực thi tập lệnh, kiểm tra kiểu MIME nghiêm ngặt được bật?


Câu trả lời:


58

Bạn có một <script>phần tử đang cố tải một số JavaScript bên ngoài.

URL bạn đã cung cấp trỏ đến một tệp JSON chứ không phải một chương trình JavaScript.

Máy chủ đang báo cáo chính xác rằng đó là JSON nên trình duyệt đang hủy bỏ thông báo lỗi đó thay vì cố gắng thực thi JSON dưới dạng JavaScript (điều này sẽ gây ra lỗi).


Tỷ lệ cược là lý do cơ bản cho điều này là bạn đang cố gắng thực hiện một yêu cầu Ajax, đã gặp lỗi nguồn gốc chéo và đã cố gắng khắc phục bằng cách nói với jQuery rằng bạn đang sử dụng JSONP. Điều này chỉ hoạt động nếu URL cung cấp JSONP (là một tập hợp con khác của JavaScript), cái này thì không.

Tuy nhiên, cùng một URL với tham số chuỗi truy vấn bổ sung callback=the_name_of_your_callback_functionsẽ trả về JavaScript.


4
bây giờ tôi đã đưa ra điều này và nó đã sửa được lỗi <script id = "data" type = "application / json"
rob.m

2
type="application/json"- Bây giờ trình duyệt biết nó không cố gắng tải JavaScript, vì vậy nó hoàn toàn bỏ qua phần tử script.
Quentin

58

Trong trường hợp của tôi, đó là tệp không được tìm thấy, tôi đã nhập sai đường dẫn đến tệp javascript.


8
Giống nhau. Đường dẫn không chính xác dẫn đến một số phản hồi trang html lỗi, do đó gây ra thông báo lỗi khó hiểu này.
Gil Roitto,

2
Câu trả lời thông minh. Cảm ơn bạn :)
Anjana Silva

21

Kết quả này là kết quả đầu tiên bật lên trong google và rộng hơn những gì đang xảy ra ở đây. Những điều sau sẽ áp dụng cho máy chủ express :

Tôi đang cố gắng truy cập tài nguyên từ một thư mục lồng nhau.

Bên trong index.htmltôi đã có

<script src="./script.js"></script>

Tuyến tĩnh đã được gắn tại:

app.use(express.static(__dirname));

Nhưng script.jsnó nằm trong thư mục lồng nhau như trong: js/myStaticApp/script.js từ chối thực thi tập lệnh, kiểm tra loại meme được bật. Tôi vừa thay đổi tuyến tĩnh thành:

app.use(express.static(path.join(__dirname, "js")));

Bây giờ nó hoạt động :)


6

Cố gắng sử dụng express.static () nếu bạn đang sử dụng Node.js.

Bạn chỉ cần chuyển tên của thư mục nơi bạn giữ các tài sản tĩnh của mình cho phần mềm trung gian express.static để bắt đầu phân phối trực tiếp các tệp. Ví dụ: nếu bạn giữ các tệp hình ảnh, CSS và JavaScript của mình trong một thư mục có tên công khai, bạn có thể làm như sau:

tức là: app.use (express.static ('public'));

Cách tiếp cận này đã giải quyết vấn đề của tôi.

Cảm ơn,


có thể không phải là câu trả lời chính xác cho câu hỏi cụ thể này nhưng đó là giải pháp cho vấn đề của tôi. Cảm ơn!
mcheah 22/07/18

2

Tôi đã vô tình đặt tên cho tệp js .minthay vì .min.js...


2

Sau khi tìm kiếm một lúc, tôi nhận ra rằng lỗi này trong Windows 10 64 bit của tôi có liên quan đến JavaScript. Để thấy điều này, hãy truy cập DevTools của trình duyệt của bạn và xác nhận điều đó trước. Trong trường hợp của tôi, nó hiển thị lỗi như "Loại MIME ('ứng dụng / javascript') không thực thi được".

Nếu đó là trường hợp, tôi đã tìm thấy một giải pháp. Đây là thỏa thuận:

  1. Người dùng vay "ilango100" trên https://github.com/jupyterlab/jupyterlab/issues/6098 :

Tôi đã có cùng một vấn đề chính xác một thời gian trước đây. Tôi nghĩ vấn đề này chỉ dành riêng cho Windows. Đó là do loại MIME được đặt sai trong sổ đăng ký Windows cho các tệp javascript. Tôi đã giải quyết vấn đề bằng cách chỉnh sửa sổ đăng ký Windows với loại nội dung chính xác:

regedit -> HKEY_LOCAL_MACHINE \ Software \ Classes -> Bạn sẽ thấy nhiều thư mục cho mỗi phần mở rộng tệp -> Chỉ cần cuộn xuống sổ đăng ký ".js" và chọn nó -> Ở bên phải, nếu giá trị "Loại Nội dung" khác với ứng dụng / javascript, thì điều này đang gây ra sự cố. Nhấp chuột phải vào Loại nội dung và thay đổi giá trị thành application / javascript

nhập mô tả hình ảnh ở đây

Hãy thử lại trong trình duyệt. "

Sau đó, tôi nhận ra rằng lỗi sẽ thay đổi. Nó thậm chí không tự động mở trong trình duyệt nữa. PGAdmin, tuy nhiên, sẽ được mở trên thanh bên (gần với lịch / đồng hồ). Bằng cách cố gắng mở trực tiếp trong trình duyệt ("Cửa sổ PGAdmin 4 mới ...") nó cũng không hoạt động.

GIẢI PHÁP CUỐI CÙNG: nhấp vào "Sao chép URL máy chủ" và dán nó vào trình duyệt của bạn. Nó đã làm việc cho tôi!


+1 điều này đã làm việc cho tôi. Tôi đã thực hiện thay đổi trong sổ đăng ký để sử dụng application/javascriptcho .jsphần mở rộng. Sau đó, tôi đóng và mở lại pgAdmin và nó tải tốt (không sao chép URL máy chủ). Tôi đang chạy Windows 8.1 và PostgresSQL 13.
Eric Mutta

1

Bình trăn

Trên Windows , nó sử dụng dữ liệu từ sổ đăng ký, vì vậy nếu giá trị "Loại Nội dung" trong HKCR / .js không được đặt thành kiểu MIME thích hợp, nó có thể gây ra sự cố của bạn.

Mở regedit và truy cập HKEY_CLASSES_ROOT, đảm bảo rằng khóa .js / Content Type có giá trị text / javascript

C:\>reg query HKCR\.js /v "Content Type"

HKEY_CLASSES_ROOT\.js
    Content Type    REG_SZ    text/javascript

0

Thêm đoạn mã như được hiển thị bên dưới vào html mục nhập. tức là "index.html" trong reactjs

<div id="wrapper"></div>
<base href="/" />


1
Tôi đánh giá rất cao lời giải thích tại sao điều này lại hữu ích.
Juan Lanus

-1

Nếu bạn có một tuyến đường nhanh như:

app.get("*", (req, res) => {
  ...
});

Cố gắng thay đổi nó cho một cái gì đó cụ thể hơn:

app.get("/", (req, res) => {
  ...
});

Ví dụ.

Hoặc nếu không, bạn có thể thấy mình phân phát đệ quy cùng một mẫu HTML lặp đi lặp lại ...


-1

Tôi gặp vấn đề tương tự sau đó tôi đã sửa như thế này

change "text/javascript"

đến

type="application/json"

2
Điều đó ngăn trình duyệt thực hiện yêu cầu URL ngay từ đầu và làm cho scriptsự hiện diện của phần tử trong tài liệu hoàn toàn vô nghĩa.
Quentin

-1

Trong trường hợp của tôi, tôi có một liên kết tượng trưng cho tệp 404'd và Tomcat của tôi không được định cấu hình để cho phép liên kết biểu tượng.

Tôi biết rằng nó không có khả năng là nguyên nhân cho hầu hết mọi người, nhưng nếu bạn đang tuyệt vọng, hãy kiểm tra khả năng này để đề phòng.


-2

tôi đã gặp vấn đề tương tự và vấn đề là tôi đã thiếu một dấu gạch chéo trong đường dẫn của mình.

tôi đã có

và để sửa nó, tôi chỉ cần thêm dấu gạch chéo vào giữa jquery-ui và jquery-ui.min:

  <script type="text/javascript" src="js/jquery-ui/jquery-ui.min.js"></script>

hy vọng điều này sẽ giúp: D


-12

Tôi đã giải quyết vấn đề của mình bằng cách chỉ thêm $ {pageContext.request.contextPath} vào đường dẫn jsp của mình. thay vì :

 <script    src="static/js/jquery-3.2.1.min.js"></script>

Tôi đặt:

 <script    src="${pageContext.request.contextPath}/static/js/jquery-3.2.1.min.js"></script>
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.