2012-05-07 26 views
5

Tôi có biểu mẫu web sử dụng reCAPTCHA để lọc ra rô bốt. Biểu mẫu có thẻ <script> tải thử thách hình ảnh xác thực trong một số . Nếu tập lệnh này không tải được, thì thử thách hình ảnh xác thực sẽ không xuất hiện và không ai có thể gửi bài đăng.Có cách nào để phát hiện xem tệp javascript bên ngoài có được tải đầy đủ không?

Có cách nào để tôi có thể phát hiện xem tập lệnh có được tải để tôi có thể tắt tính năng này từ phía tôi không?

+0

tôi sẽ đề nghị bạn sử dụng http://requirejs.org/, nhưng tôi nghĩ rằng bạn đang tìm kiếm một giải pháp nhanh chóng – wizztjh

Trả lời

6

Đính kèm sự kiện load vào yếu tố script trỏ đến reCAPTCHA.

var script = document.createElement("script"); 

script.addEventListener("load", function() { 
    // Script has loaded. 
}); 

script.src = "/path/to/recaptcha.js"; 

document.body.appendChild(script); 
+0

Bạn có thể xây dựng câu trả lời của bạn được không. Cảm ơn. –

2

Có thể bạn có thể tìm cách để thực hiện việc dò tìm đó, nhưng tôi sẽ không đề xuất nó, vì nó đánh bại mục đích của hình ảnh xác thực. Máy tính/rô bốt có thể dễ dàng khiến cho tập lệnh không tải. Mục nhập tệp máy chủ sẽ thực hiện thủ thuật.

Một tập lệnh cũng có thể được thực hiện mà chỉ thực hiện việc xử lý của bạn cho trường hợp tải không thành công, do đó phá vỡ hình ảnh xác thực của bạn.

+0

bạn có thể xây dựng như thế nào gian lận sẽ làm việc? Cảm ơn. –

+0

@BenHuh Nếu bạn có mã thông báo cho máy chủ của mình khi không cần phải có captcha (vì nó không tải được), thì bất kỳ ai cũng có thể viết một tập lệnh đơn giản thực thi mã đó cho dù captcha đã được tải hay chưa. Sau đó, hình ảnh xác thực sẽ không còn cần thiết nữa và người dùng đó có thể thêm sửa đổi đó vào bất kỳ bot nào nếu họ muốn lạm dụng biểu mẫu của bạn. – Paulpro

+0

Ồ vâng, vì javascript được thực thi phía máy khách, không phải phía máy chủ. Tôi đồng ý với bạn. Cảm ơn :) –

1

script.addEventListener sẽ không hoạt động trên IE8 và IE7. cho rằng bạn cần phải

if (!script.addEventListener) { 
     script.attachEvent("onload", function(){ 
     // script has loaded in IE 7 and 8 as well. 
}); 
    } 
    else 
    { 
    script.addEventListener("load", function() { 
     // Script has loaded. 
    }); 
} 
Các vấn đề liên quan