HeadlessChrome101: วิธีที่ Jit-Browser เปลี่ยน Chrome ให้เป็นเบราว์เซอร์หลายฟังก์ชันเต็มรูปแบบ–ชั้นเซิร์ฟเวอร์-เบราว์เซอร์
นี่คือการอธิบายด้วยภาษาธรรมดาว่า Jit-Browser ทำอะไรกับ headless Chrome อย่างไร มันใช้ Jit-TR runtime ที่เป็นกรรมสิทธิ์อย่างไร และยังต้องการอะไรบ้างเพื่อทำให้สิ่งนี้เป็นฟีเจอร์เบราว์เซอร์ชั้นหนึ่งแทนที่จะเป็นเพียงสคริปต์อีกตัวหนึ่ง
จากเครื่องมือจับภาพหน้าจอง่ายๆ ไปยัง Jit-Browser
เราเริ่มต้นด้วยเครื่องมือบรรทัดคำสั่งขนาดเล็ก: getpage https://example.com page.png. มันเปิด Chrome ในคอนเทนเนอร์ Docker ถ่ายภาพหน้าจอของ example.com ที่แสดงผลจากหน้า และออกจากระบบ
เป็นการพิสูจน์แนวคิดที่มีประโยชน์ ทุกการเรียกเป็นการเริ่มต้นใหม่ มันไม่รู้เรื่องการแปล เซสชัน หรือสถานะ มันเป็นเพียงกล้องที่ไม่มีหัว
Jit-Browser เป็นขั้นตอนถัดไป มันยังคงใช้ Chrome จริง แต่ตอนนี้:
- มันบันทึกสิ่งที่เกิดขึ้นภายในหน้า
- มันฉีดสคริปต์ Jit-TR เป็นชั้นการแปล
- มันสามารถติดตามการไหลง่ายๆ เช่น แบนเนอร์คุกกี้หรือดรอปดาวน์
- มันจับ HTML ที่แปลเต็มรูปแบบ ไม่ใช่แค่ภาพหน้าจอ
หน้านี้อธิบายกระบวนการนั้นเพื่อให้คุณเห็นว่าเราไม่ได้โบกมือ เรากำลังแสดงให้เห็นว่าชั้นหลายภาษาระดับเบราว์เซอร์สามารถทำงานได้จริง
กระบวนการ Jit-Browser ใน 6 ขั้นตอน
ในระดับสูง ทุกการจับภาพจะตามลำดับเดียวกัน
-
เปิด Chrome จริง (headless) ภายใน Docker
เราใช้ Puppeteer (pptr.dev) เพื่อเริ่มเครื่องยนต์เดียวกันที่ขับเคลื่อนเบราว์เซอร์ปกติ แต่ไม่มีหน้าต่างที่มองเห็นได้ ไม่มีตัวแยกวิเคราะห์ที่กำหนดเอง ไม่มีการแสดงผลปลอม -
ใช้คุกกี้หรือสถานะการเข้าสู่ระบบ (ถ้ากำหนดค่าไว้)
สำหรับการสาธิตที่ต้องการเซสชันที่เข้าสู่ระบบ เราเล่นคุกกี้ของคุณใหม่ ไม่มีการใช้กำลัง ไม่มีการเดารหัสผ่าน ไม่มีการขูดบัญชีที่เราไม่ควบคุม -
โหลดหน้าเป้าหมายเหมือนผู้ใช้
HTML, CSS, JavaScript, ฟอนต์, รูปภาพ เรารอnetworkidle2(https://pptr.dev/api/puppeteer.page.waitfornetworkidle) เพื่อให้บันเดิลและฟอนต์ที่ช้าสามารถโหลดเสร็จสิ้น -
ฉีดสคริปต์ Jit-TR เป็นชั้น
เราเพิ่มแท็กสคริปต์ที่ชี้ไปยังรหัส runtime ที่อยู่ระหว่างการจดสิทธิบัตรของเรา – ตัวอย่างเช่น:. โมดูล runtime Jit-TR เดินผ่าน DOM ที่เปิดเผย (document.head และ document.body) ส่ง payload ที่สกัดกลับไปยังเซิร์ฟเวอร์ของเรา (หรือเซิร์ฟเวอร์ใดๆ) เพื่อประมวลผล รับผลลัพธ์ (การแปล การปรับปรุง หรือข้อมูลใหม่) เขียนข้อความที่มองเห็นใหม่ และเพิ่มชั้นความหมายใหม่บนต้นฉบับ ข้อจำกัดเดียวที่มีอยู่คือเรียบง่าย: สคริปต์สามารถเสริมได้ แต่คำแนะนำใหม่ไม่สามารถรบกวนสคริปต์ของไซต์เองได้ สิ่งนี้มักจะถูกนำไปใช้โดยใช้MutationObserverอินสแตนซ์เพื่อดูการเปลี่ยนแปลงที่เกี่ยวข้องใน DOM ใช้การอัปเดตในแพตช์เล็กๆ ที่มุ่งเป้า และหลีกเลี่ยงการสัมผัสตรรกะของแอปพลิเคชันที่มีอยู่หรือตัวจัดการเหตุการณ์ -
เรียกใช้การไหลที่เป็นทางเลือก: คุกกี้ คลิก และเลื่อน
หน้าจริงมักต้องการการกระทำหนึ่งหรือสองอย่าง: ปิดแบนเนอร์คุกกี้ เปิดเมนู เลื่อนเพื่อโหลดข้อเสนอเพิ่มเติม Jit-Browser สามารถเรียกใช้สคริปต์การไหลง่ายๆ เพื่อให้เห็นองค์ประกอบเหล่านั้นก่อนการจับภาพ -
จับภาพผลลัพธ์ที่เสริม
เราบันทึก:- HTML ที่แก้ไขอย่างเต็มที่สำหรับการโฮสต์หรือการตรวจสอบ
- การติดตามเวลาเพื่อระบุคอขวดที่อาจเกิดขึ้น
นั่นคือแกนหลักของ HeadlessChrome101 ของเรา มันเป็นโมเดลทางจิตสำหรับวิธีที่เบราว์เซอร์สามารถปฏิบัติต่อข้อมูลใหม่หรือที่มีอยู่เป็นชั้นในตัวภายในเบราว์เซอร์ใดๆ
ทำไมสิ่งนี้ไม่ใช่แค่สคริปต์ของเล่น
Jit-Browser มีความสำคัญเพราะมันพิสูจน์ว่าชั้นระดับเบราว์เซอร์สามารถสร้างได้ด้วยชิ้นส่วนเดียวกันที่ผู้จำหน่ายเบราว์เซอร์ใช้ทุกวัน และชั้นนี้สามารถโฮสต์การโต้ตอบไคลเอนต์-เซิร์ฟเวอร์เต็มรูปแบบกับบริการภายนอกใดๆ ได้อย่างปลอดภัย รวมถึง runtime Jit-TR ของเราเอง นอกจากนี้ยังเป็นจุดที่เราเพิ่มการปรับปรุงที่ตระหนักถึง SEO เช่น rel="alternate" hreflang="..." ลิงก์และการเสริม sitemap.xml รายการ ในทางปฏิบัติ หมายความว่าเราสามารถเปิดเผยข้อมูลที่เสริมภายในภูมิภาค HTML ที่ไม่รบกวนเช่น องค์ประกอบทางซ้ายหรือขวาของหน้าที่มีอยู่ หรือโดยใช้ JavaScript modals ที่รัดตัวเลือกภาษาและ SmartSearch โดยไม่รบกวนเลย์เอาต์หรือสคริปต์ต้นฉบับ
-
เครื่องยนต์ Chrome จริง
ทุกอย่างทำงานบน Chrome เอง - เพียงแค่ไม่มีหน้าต่างที่มองเห็นได้ ถ้ามันทำงานใน Chrome สำหรับผู้เยี่ยมชมของคุณ มันก็ทำงานใน Jit-Browser -
ตระหนักถึงนโยบายความปลอดภัยของเนื้อหา
ไซต์ส่วนใหญ่ล็อกสคริปต์ด้วย CSP ในโหมด headless เราสามารถใช้ Chrome'ssetBypassCSP(true)(https://pptr.dev/api/puppeteer.page.setbypasscsp) เพื่อฉีด Jit-TR ภายในสภาพแวดล้อมการจับภาพ เราไม่ต้องการให้ไซต์การผลิตใด ๆ ลดนโยบายความปลอดภัยของพวกเขา -
การจับเวลาและการบันทึกอย่างเต็มรูปแบบ
เราบันทึกเวลาการเปิดตัว, เวลาการโหลดหน้า, การเริ่มต้น Jit-TR, ขั้นตอนการไหล, และการจับภาพ คุณสามารถเห็นได้ว่าเสี้ยววินาทีไปที่ไหนและ Jit-TR ทำอะไรจริง ๆ บนหน้า -
การแยกสคริปต์และเลเยอร์
วันนี้ Jit-TR สามารถเป็น "แค่สคริปต์" ที่คุณเพิ่มลงในไซต์ ใน Jit-Browser เราปฏิบัติต่อมันเหมือนเลเยอร์ที่เสถียรที่ทำงานเสมอ นั่นใกล้เคียงกับวิธีที่ผู้จำหน่ายเบราว์เซอร์สามารถเสียบมันเข้าไปได้โดยตรง
สิ่งที่ Jit-TR API แก้ไขแล้ว
ส่วนที่ยากไม่ใช่ Chrome แบบไม่มีหัว ส่วนที่ยากคือการเปลี่ยนหน้าเว็บที่ยุ่งเหยิงและมีชีวิตให้เป็นเวอร์ชันหลายภาษาที่ปลอดภัยอย่างเชื่อถือได้ รันไทม์ที่เป็นกรรมสิทธิ์ของเราที่ api.jit-tr.com ทำงานนั้นอยู่แล้ว
วันนี้ รันไทม์ API จัดการ:
-
การเลือกภาษา
มันอ่านพารามิเตอร์เช่นjittr=ES-419, ปรับกรณีขอบให้เป็นปกติ, และบันทึกภาษาที่เลือก, ตัวอย่างเช่น:[Jit-TR] Language chosen → ES-419. -
การสกัด DOM, การแปล, และการเขียนใหม่เชิงความหมาย
รันไทม์เดินผ่าน DOM ของ Chrome จริง, สกัดเฉพาะข้อความที่มองเห็นได้, สร้าง payload การแปลที่มีโครงสร้าง, และเขียนผลลัพธ์กลับไปยังหน้า กรณีขอบที่ยากทั้งหมดเป็นอัตโนมัติ: ลำดับอิโมจิ, เอนทิตี HTML, กฎเครื่องหมายวรรคตอนและการเว้นวรรค, สตริงภาษาผสม, และการสลับซ้ายไปขวา / ขวาไปซ้าย นอกจากนี้ยังเขียนบล็อกสคริปต์เฉพาะภาษาใหม่ — รวมถึงและแท็กข้อมูลที่มีโครงสร้างอื่น ๆ — เพื่อให้แน่ใจว่าภาษาแต่ละภาษามี metadata ที่ถูกต้อง, เป็นอิสระ, และแคชสำหรับเครื่องมือค้นหาและระบบ AI -
พฤติกรรมของลูกค้า
มันแสดงธงภาษา, เคารพรากที่ไม่ปลอดภัย, และเล่นอย่างปลอดภัยที่สุดเท่าที่จะเป็นไปได้กับแอปหน้าเดียวและเฟรมเวิร์ก
ทั้งหมดนี้ทำงานบนไซต์ Jit-TR อยู่แล้ว Jit-Browser เพียงแค่นำมาใช้ใหม่ในสภาพแวดล้อมแบบไม่มีหัวที่ควบคุมได้
สิ่งที่ยังคงต้องการสำหรับฟีเจอร์เบราว์เซอร์เนทีฟ
สิ่งที่ยังคงต้องการสำหรับฟีเจอร์เบราว์เซอร์เนทีฟ
เพื่อเปลี่ยน Jit-Browser ให้เป็นฟีเจอร์เบราว์เซอร์ในตัว, ไม่มีใครต้องการปาฏิหาริย์ - เพียงแค่ความสามารถในการวางชุดการเปลี่ยนแปลงเล็ก ๆ ที่กำหนดไว้อย่างดีที่เครื่องยนต์เบราว์เซอร์เข้าใจอยู่แล้ว
เพื่อเปลี่ยน Jit=-Browser ให้เป็นฟีเจอร์เบราว์เซอร์ในตัว นี่ไม่ใช่ปาฏิหาริย์, เพียงแค่ชุดการเปลี่ยนแปลงเล็ก ๆ ที่เบราว์เซอร์เข้าใจอยู่แล้ว
-
ฮุกเนทีฟในเครื่องยนต์
วันนี้เราจำลองสิ่งนี้โดยการฉีดสคริปต์จาก Chrome แบบไม่มีหัว การรวมจริงจะให้ Jit-TR มีช่องแปลเฉพาะเพื่อให้สามารถอ่านและเขียนข้อความ DOM ได้ในจุดที่ถูกต้องในท่อการเรนเดอร์ -
วิธีมาตรฐานในการแสดงเจตนาภาษา
เราใช้แล้ว?jittr=LANGและคุกกี้ โซลูชันระดับเบราว์เซอร์สามารถเคารพการตั้งค่าภาษาเบราว์เซอร์และตัวเลือกของผู้ใช้เช่น "แปลไซต์นี้เป็น ES-419 เสมอ" -
กรอบความปลอดภัยและความเป็นส่วนตัวที่ชัดเจน
กฎสำหรับข้อความที่สามารถออกจากอุปกรณ์, นานแค่ไหนที่สามารถแคชได้, และวิธีที่ไซต์หรือผู้ใช้สามารถเลือกไม่เข้าร่วมควรชัดเจนและมีเอกสาร การใช้งานเนทีฟภายในเบราว์เซอร์สามารถปลอดภัยกว่าสคริปต์เฉพาะกิจได้จริง
ตัวอย่าง: HarmonyOS ใน ES-419
นี่คือตัวอย่างที่เป็นรูปธรรมของท่อในทางปฏิบัติ
เราเรียก:
getpageJtrBrowser \
"https://www.harmonyos.com/" \
"jittr=ES-419" \
null \
"ES-419/index.php"
Jit-Browser:
- เปิดตัว Chrome แบบไม่มีหัวภายใน Docker
- โหลด
https://www.harmonyos.com/. - ฉีดสคริปต์ Jit-TR ด้วยพารามิเตอร์ ES-419
- ให้ Jit-TR แปลข้อความภาษาจีนที่มองเห็นได้เป็นภาษาสเปน (ละตินอเมริกา)
- บันทึกผลลัพธ์เป็น
ES-419/index.php.
ไซต์ HarmonyOS ไม่จำเป็นต้องเปลี่ยนแปลง จากมุมมองของผู้ใช้, มันดูเหมือนว่าไซต์สนับสนุนภาษาของพวกเขา
ทำไมหน้านี้ถึงมีอยู่
HeadlessChrome101 เป็นสรุปที่แสดงว่า:
- เราใช้เครื่องยนต์เบราว์เซอร์จริงและกฎ CSP จริง
- เรามีรันไทม์การแปลที่เป็นกรรมสิทธิ์ที่ทำงานได้แล้ว
- ช่องว่างที่เหลือสำหรับฟีเจอร์เบราว์เซอร์เนทีฟมีขนาดเล็กและกำหนดไว้อย่างดี
หากคุณสร้างเบราว์เซอร์ ระบบปฏิบัติการ หรือแพลตฟอร์มขนาดใหญ่และต้องการเลเยอร์หลายภาษาที่เป็นสากลซึ่งเคารพโมเดลความปลอดภัยของคุณ เราพร้อมที่จะพูดคุย โค้ดมีอยู่แล้ว พฤติกรรมสามารถวัดได้ ขั้นตอนต่อไปคือการเป็นพันธมิตร