HeadlessChrome101: Cách Jit-Browser Biến Chrome Thành Một Trình Duyệt Đa Chức Năng Hoàn Chỉnh–Lớp Trình Duyệt-Server
Đây là một hướng dẫn bằng ngôn ngữ đơn giản về những gì Jit-Browser làm với Chrome không đầu, cách nó sử dụng runtime Jit-TR độc quyền, và những gì vẫn cần thiết để biến điều này thành một tính năng trình duyệt hàng đầu thay vì chỉ là một kịch bản khác.
Từ một công cụ chụp màn hình đơn giản đến Jit-Browser
Chúng tôi bắt đầu với một công cụ dòng lệnh nhỏ: getpage https://example.com page.png. Nó khởi động Chrome trong một container Docker, chụp một ảnh màn hình của example.com đã được hiển thị từ trang, và thoát.
Bằng chứng khái niệm hữu ích. Mỗi cuộc gọi đều là một khởi động lạnh. Nó không biết gì về dịch thuật, phiên làm việc, hay trạng thái. Nó chỉ là một camera không đầu.
Jit-Browser là bước tiếp theo. Nó vẫn sử dụng Chrome thực, nhưng bây giờ:
- Nó ghi lại những gì xảy ra bên trong trang.
- Nó chèn kịch bản Jit-TR như một lớp dịch thuật.
- Nó có thể theo dõi các luồng đơn giản như banner cookie hoặc menu thả xuống.
- Nó nắm bắt HTML đã được dịch hoàn toàn, không chỉ là một ảnh chụp màn hình.
Trang này giải thích quy trình đó để bạn có thể thấy rằng chúng tôi không chỉ nói suông. Chúng tôi đang cho thấy cách một lớp đa ngôn ngữ ở cấp trình duyệt có thể hoạt động thực sự.
Quy trình Jit-Browser trong 6 bước
Ở mức cao, mỗi lần chụp đều theo cùng một trình tự.
-
Khởi động Chrome thực (không đầu) bên trong Docker.
Chúng tôi sử dụng Puppeteer (pptr.dev) để khởi động cùng một engine mà các trình duyệt bình thường sử dụng, nhưng không có cửa sổ hiển thị. Không có trình phân tích tùy chỉnh, không có hiển thị giả. -
Áp dụng cookie hoặc trạng thái đăng nhập (nếu được cấu hình).
Đối với các bản demo cần một phiên đăng nhập, chúng tôi phát lại cookie của bạn. Không có sức mạnh thô, không đoán mật khẩu, không thu thập tài khoản mà chúng tôi không kiểm soát. -
Tải trang mục tiêu chính xác như một người dùng.
HTML, CSS, JavaScript, phông chữ, hình ảnh. Chúng tôi chờ đợinetworkidle2(https://pptr.dev/api/puppeteer.page.waitfornetworkidle) để các gói chậm và phông chữ có thể hoàn tất việc tải. -
Chèn đoạn mã Jit-TR như một lớp.
Chúng tôi thêm một thẻ kịch bản trỏ đến mã runtime đang chờ cấp bằng sáng chế của chúng tôi – ví dụ:. Mô-đun runtime Jit-TR đi qua DOM được hiển thị (document.head và document.body), gửi payload đã được trích xuất trở lại máy chủ của chúng tôi (hoặc bất kỳ máy chủ nào) để được xử lý, nhận kết quả (dịch thuật, cải tiến, hoặc thông tin mới), viết lại văn bản hiển thị, và thêm các lớp ý nghĩa mới lên trên bản gốc. Các hạn chế duy nhất tồn tại là đơn giản: các kịch bản có thể được mở rộng, nhưng các hướng dẫn mới không bao giờ được can thiệp vào các kịch bản của chính trang. Điều này thường được thực hiện bằng cách sử dụngMutationObservercác phiên bản để theo dõi các thay đổi liên quan trong DOM, áp dụng các cập nhật trong các bản vá nhỏ, nhắm mục tiêu, và tránh chạm vào bất kỳ logic ứng dụng hoặc trình xử lý sự kiện nào đã tồn tại. -
Chạy các luồng tùy chọn: cookie, nhấp chuột, và cuộn.
Các trang thực thường cần một hoặc hai hành động: đóng một banner cookie, mở một menu, cuộn để tải thêm ưu đãi. Jit-Browser có thể chạy một kịch bản luồng đơn giản để các yếu tố đó có thể hiển thị trước khi chụp. -
Chụp đầu ra đã được mở rộng.
Chúng tôi lưu:- HTML đã được sửa đổi hoàn toàn để lưu trữ hoặc kiểm toán.
- Một dấu vết thời gian để xác định các nút thắt tiềm năng.
Đó là cốt lõi của HeadlessChrome101 của chúng tôi. Nó là mô hình tư duy về cách một trình duyệt có thể coi dữ liệu mới hoặc hiện có như một lớp tích hợp bên trong bất kỳ trình duyệt nào.
Tại sao điều này không chỉ là một kịch bản đồ chơi
Jit-Browser quan trọng vì nó chứng minh rằng một lớp ở cấp trình duyệt có thể được xây dựng với cùng các thành phần mà các nhà cung cấp trình duyệt đã sử dụng hàng ngày, và rằng lớp này có thể an toàn lưu trữ một tương tác đầy đủ giữa máy khách và máy chủ với bất kỳ dịch vụ bên ngoài nào, bao gồm cả runtime Jit-TR của chúng tôi. Nó cũng là điểm mà chúng tôi thêm các cải tiến nhận thức SEO như rel="alternate" hreflang="..." liên kết và phong phú sitemap.xml các mục. Trong thực tế, điều này có nghĩa là chúng tôi có thể phơi bày thông tin đã được mở rộng bên trong các vùng HTML không gây rối như các phần tử ở bên trái hoặc bên phải của trang hiện có, hoặc bằng cách sử dụng các modal JavaScript gắn kết các lựa chọn ngôn ngữ và SmartSearch mà không can thiệp vào bố cục hoặc kịch bản gốc.
-
Engine Chrome thực.
Mọi thứ chạy trên chính Chrome - chỉ là không có cửa sổ hiển thị. Nếu nó hoạt động trong Chrome cho khách truy cập của bạn, nó cũng hoạt động trong Jit-Browser. -
Chính sách bảo mật nội dung nhận thức.
Hầu hết các trang khóa các kịch bản bằng CSP. Trong chế độ không đầu, chúng tôi có thể sử dụngsetBypassCSP(true)(https://pptr.dev/api/puppeteer.page.setbypasscsp) để tiêm Jit-TR vào môi trường capture. Chúng tôi không yêu cầu bất kỳ trang sản xuất nào làm yếu đi chính sách bảo mật của họ. -
Thời gian và ghi chép đầy đủ.
Chúng tôi ghi lại thời gian khởi động, thời gian tải trang, khởi động Jit-TR, các bước quy trình và capture. Bạn có thể thấy mili giây đi đâu và Jit-TR thực sự làm gì trên trang. -
Tách biệt giữa script và layer.
Ngày nay, Jit-TR có thể là "chỉ là một script" bạn thêm vào một trang. Trong Jit-Browser, chúng tôi coi nó như một layer ổn định luôn chạy. Điều này rất gần với cách mà một nhà cung cấp trình duyệt có thể tích hợp nó một cách bản địa.
Những gì API Jit-TR đã giải quyết
Phần khó không phải là Chrome không đầu. Phần khó là chuyển đổi đáng tin cậy các trang web trực tiếp, lộn xộn thành các phiên bản đa ngôn ngữ an toàn. Runtime độc quyền của chúng tôi tại api.jit-tr.com đã thực hiện công việc đó.
Ngày nay, runtime API xử lý:
-
Lựa chọn ngôn ngữ.
Nó đọc các tham số nhưjittr=ES-419, chuẩn hóa các trường hợp đặc biệt và ghi lại ngôn ngữ đã chọn, ví dụ:[Jit-TR] Ngôn ngữ đã chọn → ES-419. -
Trích xuất DOM, dịch thuật và viết lại ngữ nghĩa.
Runtime đi qua DOM thực của Chrome, chỉ trích xuất văn bản hiển thị, xây dựng một payload dịch thuật có cấu trúc và ghi lại kết quả vào trang. Tất cả các trường hợp khó đều tự động: chuỗi emoji, thực thể HTML, quy tắc dấu câu và khoảng cách, chuỗi ngôn ngữ hỗn hợp, và chuyển đổi Từ Trái sang Phải / Từ Phải sang Trái. Nó cũng viết lại các khối script cụ thể cho ngôn ngữ — bao gồmvà các thẻ dữ liệu có cấu trúc khác — đảm bảo rằng mỗi ngôn ngữ có metadata độc lập, chính xác và được lưu trữ cho các công cụ tìm kiếm và hệ thống AI. -
Hành vi của khách hàng.
Nó hiển thị cờ ngôn ngữ, tôn trọng các gốc không an toàn, và hoạt động một cách an toàn nhất có thể với các ứng dụng và framework một trang.
Tất cả những điều này đã chạy trên các trang Jit-TR ngày hôm nay. Jit-Browser đơn giản chỉ tái sử dụng nó trong một môi trường không đầu được kiểm soát.
Những gì vẫn cần cho một tính năng trình duyệt bản địa
Những gì vẫn cần cho một tính năng trình duyệt bản địa
Để biến Jit-Browser thành một tính năng trình duyệt tích hợp, không ai cần một phép màu - chỉ cần khả năng thực hiện một bộ thay đổi nhỏ, được xác định rõ mà các engine trình duyệt đã hiểu.
Để biến Jit-Browser thành một tính năng trình duyệt tích hợp. Đây không phải là một phép màu, chỉ là một bộ thay đổi nhỏ mà các trình duyệt đã hiểu.
-
Một hook bản địa trong engine.
Ngày nay, chúng tôi mô phỏng điều này bằng cách tiêm một script từ Chrome không đầu. Một tích hợp thực sự sẽ cung cấp cho Jit-TR một slot dịch thuật dành riêng để nó có thể đọc và ghi văn bản DOM tại điểm đúng trong pipeline render. -
Một cách tiêu chuẩn để diễn đạt ý định ngôn ngữ.
Chúng tôi đã sử dụng?jittr=LANGvà cookies. Một giải pháp cấp trình duyệt có thể tôn trọng cài đặt ngôn ngữ của trình duyệt và lựa chọn của người dùng như "luôn dịch trang này sang ES-419". -
Một khung an toàn và quyền riêng tư rõ ràng.
Các quy tắc về văn bản nào có thể rời khỏi thiết bị, nó có thể được lưu trữ bao lâu, và cách mà các trang hoặc người dùng có thể từ chối nên rõ ràng và được tài liệu hóa. Một triển khai bản địa bên trong trình duyệt thực sự có thể an toàn hơn so với các script ad-hoc.
Ví dụ: HarmonyOS trong ES-419
Đây là một ví dụ cụ thể về pipeline đang hoạt động.
Chúng tôi gọi:
getpageJtrBrowser \
"https://www.harmonyos.com/" \
"jittr=ES-419" \
null \
"ES-419/index.php"
Jit-Browser:
- Khởi động Chrome không đầu bên trong Docker.
- Tải
https://www.harmonyos.com/. - Tiêm đoạn mã Jit-TR với tham số ES-419.
- Cho phép Jit-TR dịch văn bản tiếng Trung hiển thị sang tiếng Tây Ban Nha (Mỹ Latinh).
- Lưu kết quả dưới dạng
ES-419/index.php.
Trang HarmonyOS không cần thay đổi. Từ góc độ của người dùng, nó trông giống như trang chỉ đơn giản hỗ trợ ngôn ngữ của họ.
Tại sao trang này tồn tại
HeadlessChrome101 là một tóm tắt cho thấy:
- Chúng tôi đang sử dụng các engine trình duyệt thực và các quy tắc CSP thực.
- Chúng tôi đã có một runtime dịch thuật độc quyền hoạt động.
- Khoảng cách còn lại để có một tính năng trình duyệt bản địa là nhỏ và được xác định rõ.
Nếu bạn xây dựng trình duyệt, hệ điều hành hoặc các nền tảng lớn và muốn có một lớp đa ngôn ngữ toàn cầu tôn trọng mô hình bảo mật của bạn, chúng tôi sẵn sàng để nói chuyện. Mã nguồn đã tồn tại. Hành vi có thể đo lường được. Bước tiếp theo là hợp tác.