پنجره و محیط زمان اجرا
پنجره و محیط زمان اجرا
برخی اسناد فرض میکنند یک محیط مرورگری وجود دارد — یک پنجره، یک مکان، ذخیرهسازی، رویدادها. این لایه این اشیاء را در Python خالص مدلسازی میکند تا چنین اسنادی بتوانند بهصورت سمت-سرور بدون مرورگر پردازش شوند.
شیء پنجره
Window محیط را ثابت میکند، با WindowEventLoop که پردازش رویدادهای آن را هدایت میکند، و Screen، VisualViewport و BarProp حالتهای مرتبط با نمایش را مدل میسازند. BrowsingContext یک پنجره را به سند آن پیوند میدهد.
وضعیت ناوبری
Location و History آدرس و تاریخچهٔ جلسه را مدل میکنند؛ Navigator هویت محیط را گزارش میدهد، که از طریق set_default_user_agent() قابل تنظیم است.
رویدادها
رابط EventTarget با خانواده Event — CustomEvent، UIEvent، MouseEvent، KeyboardEvent، FocusEvent، InputEvent، PopStateEvent، HashChangeEvent، ErrorEvent — پیادهسازی میکند توزیع رویدادهای استاندارد. AbortController و AbortSignal لغو را فراهم میکنند.
ذخیرهسازی و پیامرسانی
Storage مدل ذخیرهسازی وب کلید-مقدار را ارائه میدهد. MessageChannel، MessagePort و BroadcastChannel انتقال پیام را پوشش میدهند، با کمککنندههای ساختار-کلون (clone_value) در پشت آنها.
ناظران و عملکرد
IntersectionObserver و ResizeObserver (با انواع ورودی خود) مدل APIهای مشاهده را ارائه میدهند، در حالی که Performance، PerformanceEntry و Console به اسکریپتهای خدمات زمان اجرا که معمولاً مورد استفاده قرار میگیرند، تکمیل میکنند.
نکات و بهترین شیوهها
- فقط زمانی که در حال پردازش اسنادی هستید که واقعاً به وضعیت محیط وابستهاند این لایه را دست بزنید — تجزیه و استایلدهی هرگز به آن نیاز ندارند.
- از
set_default_user_agent()استفاده کنید هنگامی که منطق پاییندست بر پایه هویتNavigatorشاخه میکند. - اتصال
AbortSignalبه پردازش طولانیمدت برای لغو تمیز
مسائل رایج
| مسئله | دلیل | رفع |
|---|---|---|
| اسکریپت انتظار دارد متغیرهای سراسری window موجود باشند | سند برای مرورگرها نوشته شده است | لایهٔ محیط Window را فراهم کنید |
| رویدادها هرگز فعال نمیشوند | هیچ حلقهٔ رویدادی برای هدایت ارسال وجود ندارد | از WindowEventLoop استفاده کنید |
| شاخهٔ وابسته به User-agent رفتار نادرست دارد | رشتهٔ پیشفرض UA فعال است | از طریقset_default_user_agent()تنظیم میشود |
FAQ
آیا برای تجزیه HTML به یک Window نیاز دارم؟
خیر — لایهٔ محیطی اختیاری است؛ تجزیه، CSSOM و طرحبندی مستقل از آن هستند.
کدام انواع رویداد مدلسازی شدهاند؟
خانوادهٔ استاندارد: UI، mouse، keyboard، focus، input، popstate، hashchange، error و رویدادهای سفارشی، همگی از طریق EventTarget ارسال میشوند.
آیا ذخیرهسازی وب پایدار است؟
Storage سطح API را برای مقاصد پردازشی مدلسازی میکند؛ ماندگاری به عهدهٔ برنامهٔ جاسازیکننده است.
خلاصهٔ API Reference
| کلاس/متد | توضیح |
|---|---|
Window | لنگر محیط مرور |
Location | وضعیت آدرس |
History | تاریخچه جلسه |
EventTarget | رابط ارسال رویداد |
AbortController | کنترلکننده لغو |
IntersectionObserver | مشاهده تقاطع |
set_default_user_agent | پیکربندی هویت Navigator |