שליחת נתוני איתות Bluetooth ב-Chrome 39

Ewa Gasperowicz

לפעמים כדאי לשלוח נתונים מדף אינטרנט לשרת אינטרנט בלי לחכות לתשובה. לדוגמה, ייתכן שנרצה לשלוח נתוני ניתוח או אבחון לפני שהמשתמש יוצא מהדף.

בדרך כלל, שליחת נתונים לפני היציאה כללה האזנה לאירוע של unload, כי שליחת הבקשה במועד מוקדם יותר תוביל לקבלת נתונים חלקיים - למשל, ייתכן שהחמצנו קליק שהתרחש ממש לפני היציאה. יש לשים לב שהבקשות שנשלחו ב-handler של הסרת הנתונים שנטענו צריכות להיות סינכרוניות, כי רוב הדפדפנים בדרך כלל מתעלמים מ-XMLHttpRequests האסינכרוניים שמבוצעים ב-handler של הסרת הנתונים שנטענו. גישה זו מאטה את הניווט כי המשתמש צריך להמתין לבקשה לחזור לפני שניתן יהיה לעבד דף חדש.

Beacon API פותר את הבעיה הזו בכך שהוא מאפשר לשלוח בקשות HTTP עם מטענים ייעודיים קטנים של נתונים מדפדפן לשרת אינטרנט, באופן אסינכרוני, בלי לעכב קוד אחר באירוע הסרת הנתונים שנטענו בדף או להשפיע על הביצועים של הניווט בדף הבא.

השיטה navigator.sendBeacon() מעמידה בתור את הנתונים שישודרו על ידי הדפדפן בהקדם האפשרי, אבל לא מאטה את הניווט. הפונקציה מחזירה את הערך true אם הדפדפן יכול להוסיף את הנתונים לתור להעברה. אחרת, הוא יחזיר false.

נניח שיש לנו נקודת קצה (endpoint) של שרת שזמינה לקבלת נתוני משׂואת רשת (beacon) מהדף שלנו בכתובת הזו:

https://putsreq.herokuapp.com/Dt7t2QzUkG18aDTMMcop

אם נוסיף את השיטה sendBeacon() ב-handler של האירועים של pagehide, נקודת הקצה תקבל את הנתונים כשהמשתמש יצא מהדף:

אם בודקים את הכרטיסייה 'רשת' ב-Chrome DevTools כאשר תיבת הסימון שמור יומנים מסומנת, בקשת HTTP POST נשלחת לנקודת הקצה שלמעלה כשיוצאים מהדף.

לחלופין, תוכלו לבקר בדף הבדיקה של PutsReq כדי לראות אם נתוני האיתות התקבלו.

יש גם רכיב פולימר בהתאמה אישית שמאפשר לשלוח נתוני איתות Bluetooth – <beacon-send>. אפשר לעיין בה בכתובת ebidel.github.io/beacon-send.