เมื่อวันที่ 17 มกราคม 2026 ที่ผ่านมา ทาง jQuery ได้ประกาศเปิดตัว jQuery 4.0.0 เวอร์ชันเต็ม (Final Release) อย่างเป็นทางการแล้ว ซึ่งถือเป็นการฉลองครบรอบ 20 ปีของ Library นี้พอดี (นับจากที่เปิดตัวครั้งแรกในปี 2006) แต่ version ก่อนหน้าคือ jQuery 3.7.1 28 สิงหาคม 2023 นับดู ๆ ก็ 3 ปีเลยในการพัฒนาจาก version 3 เป็น 4 แต่ผลที่ได้คือ
บอกลาการรองรับ Browser รุ่นเก่า (The Great Cleanup) ที่เจ้าอื่นทิ้งไปนานแล้ว ซักที
jQuery 4.0.0 ได้ทำการตัด Code ที่ใช้สนับสนุน Browser โบราณออกไปอย่างถาวร เพื่อให้ Library มีขนาดเล็กลงและทำงานเร็วขึ้น โดยเลิกสนับสนุน
- Internet Explorer 10 และต่ำกว่า
- Edge Legacy (เวอร์ชันก่อนโครเมียม)
- Firefox เวอร์ชันที่ต่ำกว่า 65
- iOS 10 และต่ำกว่า
Trusted Types (การจัดการ HTML ที่ปลอดภัย)
ปกติเวลาเราใช้คำสั่งอย่าง $ (container) .html (userInput) ถ้าข้อมูลที่รับมามี Script อันตรายแฝงอยู่ (XSS) เบราว์เซอร์อาจจะโดนเจาะระบบได้
- ปัญหา: ในเบราว์เซอร์สมัยใหม่จะมีนโยบายความปลอดภัยที่เรียกว่า Content Security Policy (CSP) ซึ่งถ้าเราตั้งค่าแบบเข้มงวด (
require-trusted-types-for 'script') เบราว์เซอร์จะ “สั่งแบน” การส่ง String ธรรมดาเข้าไปใน DOM ทันที - สิ่งที่ jQuery 4.0 ทำ: ตอนนี้ jQuery รองรับการรับค่าที่เป็น TrustedHTML (Object ที่ผ่านการตรวจสอบความปลอดภัยมาแล้ว) เข้าไปใน Method ต่าง ๆ เช่น
.html (),.append (), หรือ.prepend ()ได้โดยไม่ทำให้ระบบ CSP ของเบราว์เซอร์ Error ครับ
การเปลี่ยนมาใช้ <script> Tag สำหรับ AJAX
ในเวอร์ชันก่อน ๆ เวลาเราสั่งโหลด Script ผ่าน AJAX (เช่น $.getScript () ) jQuery มักจะใช้ XHR (XMLHttpRequest) ไปดึงโค้ดมาเป็น String แล้วค่อยจับยัดลงหน้าเว็บ
- ปัญหา: การทำแบบนั้นทำให้เกิดปัญหาเรื่อง CSP (Inline Script Error) เพราะเบราว์เซอร์มองว่าการเอา String มาประมวลผลเป็น Script นั้นไม่ปลอดภัย
- สิ่งที่ jQuery 4.0 ทำ: เปลี่ยนมาใช้การสร้างแท็บ
<script src="...">จริง ๆ แปะลงไปในหน้าเว็บแทน (เกือบทุกกรณี)- ข้อดี: ไม่ละเมิดกฎ CSP และทำให้เบราว์เซอร์จัดการเรื่องการแคช (Caching) และการ Debug ได้ดีขึ้น
- จุดที่ต้องระวัง: ถ้าคุณเคยส่ง Custom Headers ไปพร้อมกับการขอ Script (เช่น Token) การใช้
<script>tag จะทำไม่ได้ (เพราะมันตั้ง Header ไม่ได้เหมือน XHR) - ทางแก้: ทีมพัฒนาแนะนำให้ใช้
scriptAttrsแทนเพื่อใส่ Attribute ลงไปในแท็กแทนการใช้ Header ครับ
ย้ายระบบ Source Code ไปเป็น ES Modules
เปลี่ยนจากระบบ AMD เดิมมาเป็น ES Modules (ESM) อย่างเต็มตัว และใช้ Rollup ในการ Build ทำให้ Library ทันสมัยและเข้ากับ Build tools ใหม่ ๆ ในปัจจุบันได้ดีขึ้นมาก
- จาก AMD สู่ ES Modules (ESM)
- อดีต (AMD) : เดิมที Source Code ของ jQuery เขียนโดยใช้รูปแบบ AMD (Asynchronous Module Definition) ซึ่งต้องพึ่งพาเครื่องมืออย่าง
RequireJSในการจัดการลำดับการโหลดไฟล์ต่าง ๆ ภายใน - ปัจจุบัน (ESM) : ตอนนี้เปลี่ยนมาใช้ ES Modules (
import/export) ซึ่งเป็นมาตรฐานสากลของ JavaScript ยุคใหม่แล้ว
- อดีต (AMD) : เดิมที Source Code ของ jQuery เขียนโดยใช้รูปแบบ AMD (Asynchronous Module Definition) ซึ่งต้องพึ่งพาเครื่องมืออย่าง
- เลิกใช้เครื่องมือเก่า เปลี่ยนมาใช้ Rollup
- เดิมที jQuery มี Build tool ของตัวเองที่ซับซ้อน แต่ตอนนี้เปลี่ยนมาใช้ Rollup ซึ่งเป็นเครื่องมือมาตรฐานที่วงการ JavaScript ยอมรับในการแพ็ค Library
- การเปลี่ยนครั้งนี้ทำให้การจัดการโค้ดภายในสะอาดขึ้น และลดความซับซ้อนในการดูแลรักษา (Maintenance)
- รองรับการใช้งานผ่าน
<script type="module">
ด้วยการที่ Source เป็น ESM แล้ว คุณสามารถใช้งาน jQuery ในเบราว์เซอร์ได้โดยตรง (ไม่ต้องผ่านขั้นตอน Compile/Bundle) สำหรับโปรเจกต์เล็ก ๆ หรือการทดสอบPlain Text
<script type="module"> import $ from './path/to/jquery.module.js'; $ ('body') .append ('<h1>Hello jQuery 4.0.0 ESM!</h1>') ; </script>