Từ câu hỏi gần đây của tôi , tôi đã tạo một số hàm JavaScript cho chế độ xem một phần tải động. Vì vậy, tôi không thể gỡ lỗi bất kỳ JavaScript tải động nào. Bởi vì tất cả JavaScript được tải sẽ được đánh giá bằng hàm "eval".
Tuy nhiên, tôi đã tìm thấy một số cách để tạo JavaScript mới bằng cách sử dụng tập lệnh sau để tạo động tập lệnh vào tiêu đề của tài liệu hiện tại. Tất cả các tập lệnh đã tải sẽ được hiển thị trong HTML DOM (bạn có thể sử dụng bất kỳ trình gỡ lỗi nào để tìm nó).
var script = document.createElement('script')
script.setAttribute("type","text/javascript")
script.text = "alert('Test!');";
document.getElementsByTagName('head')[0].appendChild(script);
Nhân tiện, hầu hết trình gỡ lỗi (Thanh công cụ dành cho nhà phát triển IE8, Firebug và Google Chrome) không thể đặt breakpoint trong bất kỳ tập lệnh động nào. Bởi vì tập lệnh có thể gỡ lỗi phải được tải vào lần đầu tiên sau khi trang được tải.
Bạn có ý tưởng gỡ lỗi trong tệp hoặc nội dung tập lệnh động không?
Cập nhật 1 - Thêm mã nguồn để thử nghiệm
Bạn có thể sử dụng tệp xhtml sau để cố gắng gỡ lỗi một số giá trịVariable.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Dynamic Loading Script Testing</title>
<script type="text/javascript">
function page_load()
{
var script = document.createElement('script')
script.setAttribute("id", "dynamicLoadingScript");
script.setAttribute("type","text/javascript");
script.text = "var someVariable = 0;\n" +
"someVariable = window.outerWidth;\n" +
"alert(someVariable);";
document.getElementsByTagName('head')[0].appendChild(script);
}
</script>
</head>
<body onload="page_load();">
</body>
</html>
Từ câu trả lời, tôi chỉ kiểm tra nó trong FireBug. Kết quả sẽ được hiển thị như hình ảnh dưới đây.
Vui lòng xem tập lệnh "dynamicLoadingScript" được thêm vào sau khi tải trang.
Nhưng nó không được tìm thấy trong tab script của FireBug
Cập nhật 2 - Tạo điểm ngắt gỡ lỗi trong tập lệnh tải động
Cả hai hình ảnh trên đều hiển thị chèn "debugger;" trong một số dòng tập lệnh có thể kích hoạt điểm ngắt trong tập lệnh tải động. Tuy nhiên, cả hai trình gỡ lỗi đều không hiển thị bất kỳ mã nào tại điểm ngắt. Vì vậy, nó là vô ích cho việc làm này.
Cảm ơn,