บริบท JavaScript
JavaScript บริบท
ชั้นสคริปต์ให้บริบทการประเมินค่า JavaScript ที่ควบคุมสำหรับเอกสารที่ต้องการหนึ่งอย่างนั้น มันถูกออกแบบให้ขับเคลื่อนด้วยนโยบายอย่างตั้งใจ: การแก้ไขโมดูลเป็นแบบชัดเจนและความล้มเหลวจะแสดงเป็นข้อยกเว้นที่มีประเภท.
บริบทการประเมินค่า
JSContext โฮสต์การประเมินสคริปต์ ข้อผิดพลาดที่เกิดขึ้นระหว่างการประเมินจะแสดงเป็น JSEvaluationError ทำให้ความล้มเหลวของสคริปต์แยกจากข้อผิดพลาดด้าน Python.
การโหลดโมดูล
การแก้ไขโมดูลถูกควบคุมโดย ModuleRegistry ซึ่งทำการแมปตัวกำหนดโมดูลไปยังการนำไปใช้ โมดูลที่หายไปจะทำให้เกิด ModuleNotFoundError (ข้อผิดพลาดที่มีประเภทของไลบรารีเอง) แทนที่จะคืนค่า stub อย่างเงียบๆ.
นโยบายการโหลด
ModuleLoadPolicy ควบคุมว่าบริบทสามารถโหลดอะไรได้บ้าง — กลไกสำหรับการ sandbox พฤติกรรมสคริปต์ในกระบวนการฝั่งเซิร์ฟเวอร์ที่ไม่ต้องการให้เข้าถึงโมดูลโดยสุ่ม.
เคล็ดลับและแนวทางปฏิบัติที่ดีที่สุด
- ลงทะเบียนเฉพาะโมดูลที่สถานการณ์การประมวลผลของคุณต้องการ; รีจิสทรีขนาดเล็กคือ sandbox
- ดักจับ
JSEvaluationErrorแยกจากข้อยกเว้นทั่วไปเพื่อแยกความผิดพลาดของสคริปต์จากข้อผิดพลาดของ pipeline - ถือ
ModuleNotFoundErrorเป็นสัญญาณนโยบาย ไม่ใช่สภาวะร้ายแรง — มักหมายความว่าข้อมูลเข้าอาจคาดหวัง API ของเบราว์เซอร์ที่คุณเลือกไม่ให้
ปัญหาที่พบบ่อย
| ปัญหา | สาเหตุ | วิธีแก้ไข |
|---|---|---|
ModuleNotFoundError ในการประเมิน | โมดูลไม่ได้ลงทะเบียน | เพิ่มลงใน ModuleRegistry หรือปรับนโยบาย |
| การล้มเหลวของสคริปต์ทำให้พายป์ไลน์ล่ม | JSEvaluationError ไม่ถูกจับ | จัดการที่ขอบเขตการประเมิน |
| การเข้าถึงโมดูลที่ไม่คาดคิด | นโยบายให้สิทธิ์มากเกินไป | เพิ่มความเข้มงวด ModuleLoadPolicy |
FAQ
จำเป็นต้องประเมินสคริปต์เพื่อทำการพาร์สหรือไม่?
ไม่ — การพาร์ส, CSSOM, และการจัดวางทำงานโดยไม่มีบริบทสคริปต์ใด ๆ.
ฉันจะควบคุมสิ่งที่สคริปต์สามารถนำเข้าได้อย่างไร?
ผ่าน ModuleRegistry (สิ่งที่มีอยู่) และ ModuleLoadPolicy (สิ่งที่อาจโหลดได้).
ข้อผิดพลาดของสคริปต์จะแสดงออกมาอย่างไร?
เป็นข้อยกเว้น JSEvaluationError ทางด้าน Python.
สรุป API Reference
| คลาส/เมธอด | คำอธิบาย |
|---|---|
JSContext | JavaScript บริบทการประเมิน |
ModuleRegistry | ทะเบียนตัวระบุโมดูล |
ModuleLoadPolicy | การควบคุมนโยบายการโหลดโมดูล |
JSEvaluationError | ความล้มเหลวในการประเมินสคริปต์แบบ Typed |
ModuleNotFoundError | ความล้มเหลวของ Typed missing-module |