Hướng dẫn how do i fix javascript script error? - làm cách nào để sửa lỗi tập lệnh javascript?

Biên tập viên Lưu ý: Bài viết này đã được cập nhật vào tháng 12 năm 2019 để được cập nhật hơn.

Lỗi tập lệnh của Nhật Bản là một trong những thông báo lỗi khó hiểu nhất mà bạn có thể gặp phải. Khiếu nại chính là nó không cung cấp thông tin về nguyên nhân thực tế của vấn đề. Tuy nhiên, bí mật này không phải là một lỗi, mà là một tính năng dự định bảo vệ trang web của bạn khỏi các cuộc tấn công độc hại.

Vui lòng tham khảo tài liệu kỹ thuật của Raygun liên quan đến lỗi tập lệnh để biết các bản sửa lỗi nhanh đến các nguyên nhân phổ biến nhất.

Lỗi tập lệnh là gì?

Lỗi tập lệnh xảy ra khi tập lệnh phía máy khách vi phạm chính sách đồng nghĩa của trình duyệt của người dùng bằng cách thực hiện yêu cầu HTTP có nguồn gốc chéo không hợp lệ.

Nếu bạn làm việc trên một trang web và báo cáo về sự cố Raygun được nối vào JavaScript phía máy khách của bạn, thì Lỗi tập lệnh có thể sẽ là một trong những điều đầu tiên bạn sẽ nhận thấy xuất hiện trong bảng điều khiển của mình.

đường dẫn nhanh

  • Điều gì gây ra lỗi tập lệnh?
  • Kịch bản dài là gì?
  • Lỗi tập lệnh-Chính sách đồng nghĩa
  • Kiểm soát chính sách đồng nghĩa
  • Sử dụng một proxy web
  • Các hành vi trình duyệt khác nhau về lỗi tập lệnh

Các lỗi tập lệnh hầu như có khả năng là do lỗi trong một tập lệnh mà Lừa lưu trữ trên một miền khác (ví dụ: tập lệnh CDN). Do đó, trình duyệt của người dùng ngăn chặn tập lệnh thực thi để ngăn chặn một cuộc tấn công gọi là giả mạo yêu cầu chéo. Tuy nhiên, nó cũng có thể là một vấn đề nếu tập lệnh được lưu trữ trên cùng một miền nhưng sử dụng một cổng, giao thức khác (ví dụ http:// thay vì https://) hoặc tên miền phụ.

Ví dụ: một lỗi trong tập lệnh trên miền khác có thể trông như thế này:

// File: https://another-domain.com/index.js
const a = {};
console.log(a.b.c);

Trong miền của bạn, gọi tập lệnh đó có thể trông như thế này. Kịch bản này sẽ mang lại một lỗi tập lệnh được gửi đến Raygun4JS.

// File: origin-domain.com/index.html
<script src="http://another-domain.com/index.js"></script>

Kịch bản dài là gì?

Lỗi tập lệnh-Chính sách đồng nghĩa

Kiểm soát chính sách đồng nghĩa

Sử dụng một proxy web

Các hành vi trình duyệt khác nhau về lỗi tập lệnh

Các lỗi tập lệnh hầu như có khả năng là do lỗi trong một tập lệnh mà Lừa lưu trữ trên một miền khác (ví dụ: tập lệnh CDN). Do đó, trình duyệt của người dùng ngăn chặn tập lệnh thực thi để ngăn chặn một cuộc tấn công gọi là giả mạo yêu cầu chéo. Tuy nhiên, nó cũng có thể là một vấn đề nếu tập lệnh được lưu trữ trên cùng một miền nhưng sử dụng một cổng, giao thức khác (ví dụ http:// thay vì https://) hoặc tên miền phụ.

Ví dụ: một lỗi trong tập lệnh trên miền khác có thể trông như thế này:

Trong miền của bạn, gọi tập lệnh đó có thể trông như thế này. Kịch bản này sẽ mang lại một lỗi tập lệnh được gửi đến Raygun4JS.

Bạn cũng có thể tìm thấy một lỗi tương tự như lỗi tập lệnh trong bảng điều khiển Raygun của mình, được gọi là tập lệnh chạy dài. Tên của họ tương tự nhau, nhưng chúng là những lỗi hoàn toàn khác nhau mà bạn cần xử lý khác nhau.

Kiểm soát chính sách đồng nghĩa

Sử dụng một proxy web

Các hành vi trình duyệt khác nhau về lỗi tập lệnh

Các lỗi tập lệnh hầu như có khả năng là do lỗi trong một tập lệnh mà Lừa lưu trữ trên một miền khác (ví dụ: tập lệnh CDN). Do đó, trình duyệt của người dùng ngăn chặn tập lệnh thực thi để ngăn chặn một cuộc tấn công gọi là giả mạo yêu cầu chéo. Tuy nhiên, nó cũng có thể là một vấn đề nếu tập lệnh được lưu trữ trên cùng một miền nhưng sử dụng một cổng, giao thức khác (ví dụ http:// thay vì https://) hoặc tên miền phụ.

Ví dụ: một lỗi trong tập lệnh trên miền khác có thể trông như thế này:

// File: origin-domain.com/index.html
<script crossorigin="anonymous" src="//another-domain.com/index.js"></script>

Không có thuộc tính

// File: origin-domain.com/index.html
<script src="http://another-domain.com/index.js"></script>
1 hiện tại, các trình duyệt không sử dụng CORS, có nghĩa là họ cho rằng tập lệnh được yêu cầu được lưu trữ trên cùng một nguồn gốc và có thể tải mà không có rủi ro bảo mật. Tuy nhiên, khi họ nhận ra rằng tập lệnh được yêu cầu từ miền của bên thứ ba, trình duyệt của bạn sẽ từ chối tải nó.

Khi bạn thêm thuộc tính

// File: origin-domain.com/index.html
<script src="http://another-domain.com/index.js"></script>
1 với từ khóa ẩn danh, bạn sẽ thông báo cho trình duyệt của người dùng mà bạn muốn sử dụng cơ chế CORS để thực hiện yêu cầu chéo an toàn. Do đó, không có trao đổi thông tin đăng nhập người dùng thông qua cookie hoặc xác thực HTTP khi yêu cầu được gửi qua lại.

2. Trên miền của bên thứ ba

Bit dữ liệu quan trọng thứ hai là sự hiện diện của tiêu đề HTTP trên phản hồi từ miền của bên thứ ba chứa JavaScript. Cụ thể, tiêu đề

// File: origin-domain.com/index.html
<script src="http://another-domain.com/index.js"></script>
4:

Access-Control-Allow-Origin: *

Lưỡi đại diện trong ví dụ này cho phép các yêu cầu chéo đến bất kỳ trang web nào. Điều này phù hợp cho một CDN trong đó tập lệnh có thể được yêu cầu bởi bất kỳ miền của bên thứ ba. Nếu đây là một máy chủ riêng cho một bộ tên miền đã biết, ví dụ, bạn có thể cung cấp danh sách đó thay cho ký tự đại diện::

Access-Control-Allow-Origin: http://origin-domain.com

Bạn cần thực hiện tiêu đề phản hồi

// File: origin-domain.com/index.html
<script src="http://another-domain.com/index.js"></script>
4 trên máy chủ của bên thứ ba nơi tập lệnh bên ngoài đến từ. Cách thức và nơi để thêm tiêu đề HTTP phụ thuộc vào loại máy chủ của bên thứ ba.

Ví dụ: đây là một ví dụ mã bạn có thể sử dụng trên máy chủ Apache. Bạn có thể thêm nó vào tệp

// File: origin-domain.com/index.html
<script src="http://another-domain.com/index.js"></script>
6. Nó cho phép máy chủ của bên thứ ba gửi tất cả các tệp bằng tiện ích mở rộng
// File: origin-domain.com/index.html
<script src="http://another-domain.com/index.js"></script>
7 cho bất kỳ miền bên ngoài nào.

<FilesMatch "\.(js)$">
Header set Access-Control-Allow-Origin "*"
</FilesMatch>

Hoặc, nếu bạn không chỉ muốn thêm hỗ trợ CORS cho các tập lệnh nhưng các tài nguyên khác mà bạn có thể cần, chẳng hạn như phông chữ web và CSS, bạn có thể sử dụng mã sau thay vào đó: thay vào đó:

<FilesMatch "\.(ttf|ttc|otf|eot|woff|woff2|css|js)$">
Header set Access-Control-Allow-Origin "*"
</FilesMatch>

Chẳng hạn, ở đây, những gì tôi nhận được trong Chrome 66, mà không có máy chủ của bên thứ ba gửi tiêu đề HTTP thích hợp:

Hướng dẫn how do i fix javascript script error? - làm cách nào để sửa lỗi tập lệnh javascript?
Như bạn có thể thấy, trình duyệt có thể tải tập lệnh bên ngoài và thông báo lỗi xuất hiện trong bảng điều khiển.

Sau khi thêm hỗ trợ CORS vào máy chủ, tiêu đề

// File: origin-domain.com/index.html
<script src="http://another-domain.com/index.js"></script>
4 xuất hiện trong phản hồi, tập lệnh của bên thứ ba tải chính xác và thông báo lỗi biến mất khỏi bảng điều khiển:

Hướng dẫn how do i fix javascript script error? - làm cách nào để sửa lỗi tập lệnh javascript?

Nếu bạn muốn thêm hỗ trợ CORS vào một nền tảng máy chủ khác, thì có một trang web tuyệt vời có tên là kích hoạt CORS mà bạn có thể thấy hữu ích. Nó chia sẻ các ví dụ và triển khai mã cho một số nền tảng khác nhau như IIS, Nginx, Tomcat và các nền tảng khác. Ngoài ra, các nhà cung cấp CDN lớn hơn như KEYCDN cũng thường có các trang hỗ trợ giải thích cách bạn có thể đặt các tiêu đề HTTP tùy chỉnh trên nền tảng của họ.

Sử dụng một proxy web

Sử dụng proxy web là một phương pháp thay thế bạn có thể sử dụng để giải quyết vấn đề. Nó có thể đặc biệt hữu ích nếu, vì một số lý do, bạn có thể sửa đổi tiêu đề HTTP được gửi bởi máy chủ của bên thứ ba. Bạn cần thiết lập một proxy trên máy chủ web của mình, sau đó thực hiện các yêu cầu AJAX của bạn, không phải là miền của bên thứ ba, mà là proxy Web được lưu trữ trên cùng một miền.

Máy chủ proxy chuyển tiếp yêu cầu đến máy chủ của bên thứ ba, tìm nạp tập lệnh và gửi lại cho trang web của bạn. Do đó, trình duyệt giải thích nó như một yêu cầu đồng nghĩa và cho phép mã frontend của bạn truy cập tập lệnh của bên thứ ba. Trên thực tế, proxy Web có chức năng như một trung gian cho các yêu cầu của bạn từ các máy chủ khác.

Có một số proxy CORS nguồn mở có sẵn trên web, chẳng hạn như Crossorigin.me hoặc CORS ở bất cứ đâu. Tuy nhiên, các dịch vụ này chỉ nên được sử dụng trong phát triển. Không bao giờ sử dụng proxy CORS mở trên trang web sản xuất, chúng không đáng tin cậy và có thể gây ra rủi ro bảo mật nghiêm trọng.

Các hành vi trình duyệt khác nhau về lỗi tập lệnh

Tùy thuộc vào trình duyệt mà người dùng của bạn đang chạy, các thuộc tính trên có thể có hoặc không có hiệu ứng. Điều này tổng hợp tình huống khi viết, liên quan đến hỗ trợ trình duyệt cho thuộc tính

// File: origin-domain.com/index.html
<script src="http://another-domain.com/index.js"></script>
1 và CORS:

  • Chrome 30+
  • Firefox 13+
  • Opera 12.50+
  • Safari (ít nhất là 6+)
  • Cạnh 0.10+

Trong các trình duyệt này, nếu có thẻ

// File: origin-domain.com/index.html
<script src="http://another-domain.com/index.js"></script>
0, tiêu đề HTTP cũng cần phải có mặt. Nếu không, tập lệnh sẽ bị chặn.

Firefox có một hành vi bổ sung cho các lỗi thời gian chạy. Chúng sẽ được cung cấp cho window.onerror, bất kể hai thuộc tính. Đây là một rủi ro bảo mật. Tuy nhiên, các lỗi cú pháp sẽ bị chặn trong cả trình duyệt Gecko và WebKit, nếu thuộc tính

// File: origin-domain.com/index.html
<script src="http://another-domain.com/index.js"></script>
1 có mặt, nhưng miền có nguồn gốc chéo liên quan thiếu tiêu đề.

trình duyệt web IE

Lỗi sẽ được báo cáo với tất cả dữ liệu có sẵn trong IE 10 trở xuống. Bây giờ được coi là một vấn đề bảo mật.

Internet Explorer 11+

Các lỗi của bên thứ ba đã giành được bất kỳ dữ liệu nào và các thuộc tính không được tôn trọng tại thời điểm viết.

Sẵn sàng để nổ tung lỗi kịch bản?

Báo cáo sự cố Raygun bề mặt lỗi tập lệnh của bạn cho bạn. Xem những gì tiếng vang là về và bắt đầu dùng thử 14 ngày miễn phí của bạn.

Làm cách nào để sửa lỗi JavaScript?

Khắc phục lỗi JavaScript..
Mở trang web demo lỗi JavaScript được báo cáo trong công cụ bảng điều khiển trong một cửa sổ hoặc tab mới ..
Nhấp chuột phải vào bất cứ nơi nào trong trang web và sau đó chọn Kiểm tra. Hoặc, nhấn F12. ....
Nhấp vào nút Bảng điều khiển mở để xem lỗi ở phía trên bên phải. ....
Nhấp vào lỗi ..

Tại sao tôi nhận được một thông báo lỗi tập lệnh?

Lỗi tập lệnh của Nhật Bản là những gì các trình duyệt gửi đến cuộc gọi lại OnError khi lỗi bắt nguồn từ tệp JavaScript được phục vụ từ một nguồn gốc khác (miền khác, cổng hoặc giao thức).Thật đau đớn vì mặc dù có lỗi xảy ra, bạn không biết lỗi là gì, cũng như từ mã nào của nó.what browsers send to the onerror callback when an error originates from a JavaScript file served from a different origin (different domain, port, or protocol). It's painful because even though there's an error occurring, you don't know what the error is, nor from which code it's originating.

Làm cách nào để sửa lỗi JavaScript trong Google?

Trong Chrome, điều hướng đến View> Trình phát triển> Bảng điều khiển JavaScript hoặc nhiều công cụ hơn> Bảng điều khiển JavaScript hoặc nhấn Ctrl + Shift + J. Bảng điều khiển lỗi sẽ mở.Nếu bạn không thấy bất kỳ lỗi nào, hãy thử tải lại trang.Lỗi có thể được tạo khi tải trang.navigate to View > Developer > JavaScript Console or More Tools > JavaScript Console or press Ctrl + Shift + J. The error console will open. If you don't see any errors try reloading the page. The error may be generated when the page loads.

Làm cách nào để loại bỏ thông báo lỗi tập lệnh?

Trên menu Công cụ, chọn Tùy chọn Internet.Nếu bạn không thể xem menu Công cụ, nhấn Alt để hiển thị menu.Trên tab nâng cao, xóa hiển thị thông báo về mỗi hộp lỗi tập lệnh, sau đó chọn OK.