เอกสารนี้จะอธิบายแนวทางปฏิบัติแนะนําในการโหลดแท็กสคริปต์ reCAPTCHA ข้อมูลนี้ใช้ได้กับทั้ง reCAPTCHA v2 และ v3
การโหลด reCAPTCHA แบบไม่พร้อมกัน
reCAPTCHA ทุกเวอร์ชันโหลดพร้อมกันได้ การโหลด reCAPTCHA แบบไม่พร้อมกันจะไม่ส่งผลต่อความสามารถในการระบุการเข้าชมที่น่าสงสัย เนื่องจากประโยชน์ด้านประสิทธิภาพของสคริปต์แบบไม่พร้อมกัน ขอแนะนําให้โหลด reCAPTCHA แบบไม่พร้อมกัน
<script async src="https://www.google.com/recaptcha/api.js">
เมื่อโหลด reCAPTCHA แบบไม่พร้อมกัน โปรดทราบว่า reCAPTCHA จะใช้ไม่ได้จนกว่าจะโหลดเสร็จ ตัวอย่างเช่น โค้ดต่อไปนี้มีแนวโน้มที่จะล็อก
<script async src="https://www.google.com/recaptcha/api.js"></script>
<script>
// If reCAPTCHA is still loading, grecaptcha will be undefined.
grecaptcha.ready(function(){
grecaptcha.render("container", {
sitekey: "ABC-123"
});
});
</script>
ในบางสถานการณ์ การปรับลําดับสคริปต์ก็อาจเพียงพอสําหรับการป้องกันเงื่อนไขการแข่งขัน หรือจะป้องกันเงื่อนไขเชื้อชาติโดยใส่ข้อมูลโค้ดต่อไปนี้ในหน้าเว็บที่โหลด reCAPTCHA ก็ได้ หากคุณใช้ grecaptcha.ready()
เพื่อรวมการเรียก API ให้เพิ่มข้อมูลโค้ดต่อไปนี้เพื่อให้เรียกใช้ reCAPTCHA ได้ทุกเมื่อ
<script async src="https://www.google.com/recaptcha/api.js"></script>
<script>
// How this code snippet works:
// This logic overwrites the default behavior of `grecaptcha.ready()` to
// ensure that it can be safely called at any time. When `grecaptcha.ready()`
// is called before reCAPTCHA is loaded, the callback function that is passed
// by `grecaptcha.ready()` is enqueued for execution after reCAPTCHA is
// loaded.
if(typeof grecaptcha === 'undefined') {
grecaptcha = {};
}
grecaptcha.ready = function(cb){
if(typeof grecaptcha === 'undefined') {
// window.__grecaptcha_cfg is a global variable that stores reCAPTCHA's
// configuration. By default, any functions listed in its 'fns' property
// are automatically executed when reCAPTCHA loads.
const c = '___grecaptcha_cfg';
window[c] = window[c] || {};
(window[c]['fns'] = window[c]['fns']||[]).push(cb);
} else {
cb();
}
}
// Usage
grecaptcha.ready(function(){
grecaptcha.render("container", {
sitekey: "ABC-123"
});
});
</script>
อีกทางเลือกหนึ่งคือเว็บไซต์ที่ใช้ v2 API ซึ่งอาจมีประโยชน์สําหรับการใช้ onload
โค้ดเรียกกลับ ส่วนการเรียก onload
จะดําเนินการเมื่อ reCAPTCHA โหลดเสร็จ ควรกําหนดการเรียกกลับ onload
ก่อนโหลดสคริปต์ reCAPTCHA
<script>
const onloadCallback = function() {
console.log("reCAPTCHA has loaded!");
grecaptcha.reset();
};
</script>
<script async src="https://www.google.com/recaptcha/api.js?onload=onloadCallback”></script>
หากไม่ใช่การโหลด reCAPTCHA แบบไม่พร้อมกัน ขอแนะนําให้ใช้คําแนะนําเกี่ยวกับทรัพยากรของ preconnect
สําหรับ reCAPTCHA ซึ่งจะช่วยลดระยะเวลาการดาวน์โหลดสคริปต์เพื่อบล็อกโปรแกรมแยกวิเคราะห์
การใช้คําแนะนําทรัพยากร
การใส่คําแนะนําแหล่งข้อมูลต่อไปนี้ลงใน <head>
ของเอกสารจะช่วยลดระยะเวลาที่ต้องใช้ในการส่งทรัพยากรที่ reCAPTCHA ใช้ คําแนะนําเกี่ยวกับทรัพยากร preconnect
จะสั่งให้เบราว์เซอร์สร้างการเชื่อมต่อเริ่มต้นกับต้นทางของบุคคลที่สาม
<link rel="preconnect" href="https://www.google.com">
<link rel="preconnect" href="https://www.gstatic.com" crossorigin>
การโหลดแบบ Lazy Loading
โดยทั่วไปแล้ว ยิ่งถ้า reCAPTCHA มีบริบทเกี่ยวกับหน้าเว็บมากเท่าไร เนื้อหานั้นก็ยิ่งมีข้อมูลมากขึ้นในการพิจารณาว่าการดําเนินการของผู้ใช้ถูกต้องหรือไม่ โดยเฉพาะเมื่อใช้ reCAPTCHA ที่ไม่ได้อาศัยท้าทายของผู้ใช้ เราจึงไม่แนะนําให้โหลด reCAPTCHA จนกว่าจะมีการดําเนินการแบบจํากัด (เช่น การส่งแบบฟอร์ม)