النافذة وبيئة التشغيل
النافذة وبيئة وقت التشغيل
تفترض بعض المستندات وجود بيئة تصفح — نافذة، موقع، تخزين، أحداث. تُنمذج هذه الطبقة تلك الكائنات في 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 (مع أنواع الإدخال الخاصة بهما) يُنمذجان واجهات برمجة المراقبة، بينما Performance وPerformanceEntry وConsole يُكملون سكربتات خدمات وقت التشغيل التي تُلامس عادةً.
نصائح وأفضل الممارسات
- لا تتعامل مع هذه الطبقة إلا عند معالجة المستندات التي تعتمد فعليًا على حالة البيئة — التحليل والتنسيق لا يتطلبانها أبدًا.
- استخدم
set_default_user_agent()عندما يتفرّع المنطق اللاحق بناءً على هويةNavigator. - ربط
AbortSignalبعملية معالجة طويلة الأمد لإلغاء نظيف
مشكلات شائعة
| المشكلة | السبب | الحل |
|---|---|---|
| السكريبت يتوقع المتغيّرات العامة للنافذة | المستند مُعد للمتصفحات | قدّم طبقة البيئة Window |
| الأحداث لا تُطلق أبداً | لا توجد حلقة أحداث تدفع الإرسال | استخدم WindowEventLoop |
| الفرع المعتمد على وكيل المستخدم يتصرف بشكل غير سليم | سلسلة UA الافتراضية سارية | تعيين عبر set_default_user_agent() |
FAQ
هل أحتاج إلى Window لتحليل HTML؟
لا — طبقة البيئة اختيارية؛ التحليل، CSSOM، والتخطيط مستقلون عنها.
ما هي أنواع الأحداث التي تم نمذجتها؟
العائلة القياسية: UI، الفأرة، لوحة المفاتيح، التركيز، الإدخال، popstate، hashchange، الخطأ، والأحداث المخصصة، جميعها تُرسل عبر EventTarget.
هل التخزين الويب دائم؟
Storage يُنمذج سطح API لأغراض المعالجة؛ الاستمرارية تعتمد على التطبيق المضمن.
API Reference ملخص
| فئة/طريقة | وصف |
|---|---|
Window | مرساة بيئة التصفح |
Location | حالة العنوان |
History | سجل الجلسة |
EventTarget | واجهة توزيع الحدث |
AbortController | وحدة التحكم بالإلغاء |
IntersectionObserver | ملاحظة التقاطع |
set_default_user_agent | تكوين هوية Navigator |