report / setReportUrl / createData
چراغکهای سنجش را به نقطهٔ پایانی خودتان میفرستد.
API
setReportUrl(config)
نقطهٔ پایانی پیشفرض را یک بار هنگام راهاندازی تنظیم کنید. رشتهٔ نشانی یا یک شیء را میپذیرد:
| میدان | توضیح | نوع |
|---|---|---|
url | نقطهٔ پایانی پیشفرض برای هر report() که url خودش را ندارد | string |
userIdCookie | کوکی دربردارندهٔ شناسهٔ کاربر که createData() آن را برمیدارد | string |
getReportUrl()
نقطهٔ پایانی تنظیمشده، وگرنه ''.
report({ url?, type?, payload })
payload را میفرستد. نخست navigator.sendBeacon را میآزماید و اگر نشد به درخواست تصویر ۱×۱ پناه میبرد. اگر یکی از راهها آن را پذیرفت true و اگر هیچکدام نتوانست بفرستد false برمیگرداند؛ نبودِ نقطهٔ پایانیِ تنظیمشده هم در همین دستهٔ دوم است.
createData(params?)
پوشش استاندارد را میسازد: شناسهٔ رویداد، نشانی صفحه، برچسب زمانی، ارجاعدهنده، دیدگاه و عامل کاربر، و اگر userIdCookie تنظیم شده باشد userId هم. params شما در پایان اعمال میشود. در SSR مقدار {} برمیگردد.
نمونه
import { createData, report, setReportUrl } from 'ranuts';
setReportUrl({ url: 'https://telemetry.example.com/collect', userIdCookie: 'uid' });
report({ payload: { ...createData(), type: 'page_view' } });یادداشتها
- نقطهٔ پایانی پیشفرضی در کار نیست، و این عمدی است. کتابخانه از کجا بداند سنجش شما به کجا تعلق دارد؟ پس
report()بهجای حدس زدنfalseبرمیگرداند. - انتخاب راه بر پایهٔ این است که
sendBeaconواقعاً موفق شده باشد، نه بر پایهٔ وجودnavigator.sendBeaconآنگاه که صف مرورگر از سهمیه بگذرد نیزfalseمیدهد؛ آن حالت هم به چراغک تصویری میرسد. createData()را برای هر رویداد صدا بزنید، نه یک بار هنگام آمادهسازی. این تابع نشانی و برچسب زمانی را در همان دمی که اجرا میشود عکس میگیرد؛ اگر آن را از دل رسیدگیکننده بیرون بکشید، همهٔ رویدادهای بعدی وضعیت لحظهٔ بارگذاری صفحه را گزارش میکنند.
در ۰٫۳ جای getHost را گرفت
getHost() برداشته شده است. نقطهٔ پایانی گزارش را از دامنهای میساخت که به نام نویسندهٔ همین مخزن در کد سفت شده بود، و ویرایشی نیمهکاره خروجیاش را تا رشتهٔ عینی '//log.' (میزبانی که به آن نمیتوان رسید) خراب کرده بود؛ پس هر گزارشی که url صریح نداشت، خاموشانه به هیچ فرستاده میشد. createData() نیز دیگر کوکی سفتشدهٔ chaxus_prod را نمیخواند؛ بهجایش userIdCookie را تنظیم کنید.