บริบท 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

คลาส/เมธอดคำอธิบาย
JSContextJavaScript บริบทการประเมิน
ModuleRegistryทะเบียนตัวระบุโมดูล
ModuleLoadPolicyการควบคุมนโยบายการโหลดโมดูล
JSEvaluationErrorความล้มเหลวในการประเมินสคริปต์แบบ Typed
ModuleNotFoundErrorความล้มเหลวของ Typed missing-module

ดูเพิ่มเติม

 ภาษาไทย