Linux là nền tảng duy nhất mà người dùng Chrome có thể cài đặt các tiện ích được lưu trữ bên ngoài Cửa hàng Chrome trực tuyến. Bài viết này mô tả cách đóng gói, lưu trữ và cập nhật tệp crx
từ một máy chủ web dùng cho nhiều mục đích. Nếu bạn chỉ phân phối một tiện ích hoặc giao diện thông qua Cửa hàng Chrome trực tuyến, hãy tham khảo bài viết Tính năng lưu trữ và cập nhật Cửa hàng Chrome trực tuyến.
Gói
Tiện ích và giao diện được phân phát dưới dạng tệp .crx
. Khi tải lên thông qua Trang tổng quan dành cho nhà phát triển Chrome, trang tổng quan sẽ tự động tạo tệp crx
. Nếu phát hành trên máy chủ cá nhân, bạn cần tạo tệp crx
trên máy hoặc tải tệp xuống từ Cửa hàng Chrome trực tuyến.
Tải tệp .crx xuống từ Cửa hàng Chrome trực tuyến
Nếu một tiện ích được lưu trữ trên Cửa hàng Chrome trực tuyến, bạn có thể tải tệp .crx
xuống từ Trang tổng quan dành cho nhà phát triển. Tìm tiện ích đó trong "Trang thông tin của bạn" rồi nhấp vào "Thông tin khác". Trong cửa sổ bật lên, hãy nhấp vào đường liên kết main.crx
màu xanh dương để tải xuống.
Tệp đã tải xuống có thể được lưu trữ trên máy chủ cá nhân. Đây là cách an toàn nhất để lưu trữ một tiện ích trên máy vì nội dung của tiện ích sẽ được Cửa hàng Chrome trực tuyến ký. Điều này giúp phát hiện các cuộc tấn công và hành vi can thiệp tiềm ẩn.
Tạo tệp .crx cục bộ
Thư mục tiện ích được chuyển đổi thành tệp .crx
tại Trang quản lý tiện ích. Chuyển đến chrome://extensions/
trong thanh địa chỉ hoặc nhấp vào trình đơn Chrome, giữ con trỏ trên "Công cụ khác" rồi chọn "Tiện ích".
Trên Trang quản lý tiện ích, hãy bật Chế độ nhà phát triển bằng cách nhấp vào nút bật/tắt bên cạnh Chế độ nhà phát triển. Sau đó, chọn nút MỞ RỘNG GÓI.
Chỉ định đường dẫn đến thư mục của tiện ích trong trường thư mục gốc của tiện ích, sau đó nhấp vào nút MỞ RỘNG GÓI. Bỏ qua trường Private key (Khoá riêng tư) đối với gói lần đầu.
Chrome sẽ tạo hai tệp, tệp .crx
và tệp .pem
, chứa khoá riêng của tiện ích.
Đừng để mất khoá riêng tư! Giữ tệp .pem
ở nơi bí mật và an toàn; bạn sẽ cần tệp này để cập nhật tiện ích.
Cập nhật gói .crx
Cập nhật tệp .crx
của một tiện ích bằng cách tăng số phiên bản trong manifest.json
.
{
...
"version": "1.5",
...
}
}
{
...
"version": "1.6",
...
}
}
Quay lại Extensions Management Page (Trang quản lý tiện ích) rồi nhấp vào nút PACK EXTENSION (GÓI PHẦN MỞ RỘNG). Chỉ định đường dẫn đến thư mục tiện ích và vị trí của khoá riêng tư.
Trang này sẽ cung cấp đường dẫn cho phần mở rộng đóng gói đã cập nhật.
Đóng gói thông qua dòng lệnh
Gói các tiện ích trong dòng lệnh bằng cách gọi chrome.exe
. Sử dụng cờ --pack-extension
để chỉ định vị trí của thư mục tiện ích và cờ --pack-extension-key
để chỉ định vị trí của tệp khoá riêng tư của tiện ích.
chrome.exe --pack-extension=C:\myext --pack-extension-key=C:\myext.pem
Máy chủ
Máy chủ lưu trữ tệp .crx
phải sử dụng các tiêu đề HTTP thích hợp để cho phép người dùng cài đặt tiện ích bằng cách nhấp vào một đường liên kết.
Google Chrome coi một tệp là có thể cài đặt nếu một trong hai điều kiện sau đây là đúng:
- Tệp có loại nội dung
application/x-chrome-extension
- Hậu tố tệp là
.crx
và cả hai điều kiện sau đều đúng:- Tệp không được phân phát với tiêu đề HTTP
X-Content-Type-Options: nosniff
- Tệp được phân phát cùng với một trong những loại nội dung sau:
- chuỗi trống
"text/plain"
"application/octet-stream"
"unknown/unknown"
"application/unknown"
"\*/\*"
- Tệp không được phân phát với tiêu đề HTTP
Lý do phổ biến nhất khiến không nhận dạng được tệp có thể cài đặt là máy chủ gửi tiêu đề X-Content-Type-Options: nosniff
. Lý do phổ biến thứ hai là máy chủ gửi một loại nội dung không xác định – một loại không có trong danh sách trước đó. Để khắc phục vấn đề về tiêu đề HTTP, hãy thay đổi cấu hình của máy chủ hoặc thử lưu trữ tệp .crx
tại một máy chủ khác.
Cập nhật
Cứ vài giờ một lần, trình duyệt sẽ kiểm tra các tiện ích đã cài đặt để tìm URL cập nhật. Đối với mỗi phần tử, hệ thống sẽ gửi yêu cầu đến URL đó để tìm tệp XML của tệp kê khai cập nhật.
- Nội dung mà quá trình kiểm tra bản cập nhật trả về là tài liệu XML tệp kê khai cập nhật liệt kê phiên bản mới nhất của một tiện ích.
Nếu tệp kê khai cập nhật đề cập đến một phiên bản mới hơn phiên bản đã cài đặt, thì trình duyệt sẽ tải xuống và cài đặt phiên bản mới. Cũng như với bản cập nhật thủ công, tệp .crx
mới phải được ký bằng cùng một khoá riêng tư với phiên bản hiện đã cài đặt.
Cập nhật URL
Các tiện ích được lưu trữ trên các máy chủ bên ngoài Cửa hàng Chrome trực tuyến phải bao gồm trường update_url
trong tệp manifest.json
.
{
"name": "My extension",
...
"update_url": "https://myhost.com/mytestextension/updates.xml",
...
}
Cập nhật tệp kê khai
Tệp kê khai cập nhật mà máy chủ trả về phải là một tài liệu XML.
<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
<app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
<updatecheck codebase='https://myhost.com/mytestextension/mte_v2.crx' version='2.0' />
</app>
</gupdate>
Định dạng XML này được mượn từ định dạng mà Omaha (cơ sở hạ tầng cập nhật của Google) sử dụng. Hệ thống tiện ích sử dụng các thuộc tính sau cho phần tử <app>
và <updatecheck>
của tệp kê khai bản cập nhật:
- appid
- Mã nhận dạng tiện ích được tạo dựa trên hàm băm của khoá công khai, như mô tả trong phần đóng gói. Mã của một tiện ích sẽ xuất hiện trên Trang quản lý tiện ích.
- cơ sở mã
- URL loại HTTPS dẫn đến tệp
.crx
. - version
- Được ứng dụng khách sử dụng để xác định xem ứng dụng đó có nên tải tệp
.crx
docodebase
chỉ định xuống hay không. Giá trị này phải khớp với giá trị của "version" (phiên bản) trong tệpmanifest.json
của tệp.crx
.
Tệp XML của tệp kê khai cập nhật có thể chứa thông tin về nhiều phần mở rộng bằng cách thêm nhiều phần tử <app>
.
Thử nghiệm
Tần suất kiểm tra bản cập nhật mặc định là vài giờ, nhưng bạn có thể buộc phải cập nhật bằng cách sử dụng nút Cập nhật tiện ích ngay trên Trang quản lý tiện ích.
Thao tác này sẽ bắt đầu kiểm tra tất cả các tiện ích đã cài đặt.
Cách sử dụng nâng cao: tham số yêu cầu
Cơ chế tự động cập nhật cơ bản được thiết kế để giúp hoạt động phía máy chủ trở nên dễ dàng, chỉ cần thả một tệp XML tĩnh vào bất kỳ máy chủ web thuần tuý nào, chẳng hạn như Apache, và cập nhật tệp XML đó khi các phiên bản tiện ích mới được phát hành.
Nhà phát triển lưu trữ nhiều tiện ích có thể kiểm tra các tham số yêu cầu, cho biết mã nhận dạng và phiên bản tiện ích trong yêu cầu cập nhật. Việc bao gồm các tham số này cho phép các tiện ích cập nhật từ cùng một URL chạy mã phía máy chủ động thay vì một tệp XML tĩnh.
Định dạng của các tham số yêu cầu là:
?x=EXTENSION_DATA
Trong đó EXTENSION_DATA
là một chuỗi được mã hoá URL theo định dạng:
id=EXTENSION_ID&v=EXTENSION_VERSION
Ví dụ: hai tiện ích trỏ đến cùng một URL cập nhật (https://test.com/extension_updates.php
):
- Phần mở rộng 1
- Mã nhận dạng: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- Phiên bản: "1.1"
- Phần mở rộng 2
- Mã nhận dạng: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
- Phiên bản: "0.4"
Yêu cầu cập nhật từng tiện ích riêng lẻ sẽ là,
https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1
và
https://test.com/extension_updates.php?x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
Bạn có thể liệt kê nhiều tiện ích trong một yêu cầu cho mỗi URL cập nhật riêng biệt. Đối với ví dụ trước, nếu người dùng đã cài đặt cả hai tiện ích, thì 2 yêu cầu sẽ được hợp nhất thành một yêu cầu duy nhất:
https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
Nếu số lượng tiện ích đã cài đặt sử dụng cùng một URL cập nhật đủ lớn khiến URL yêu cầu GET quá dài (trên 2000 ký tự), thì tính năng kiểm tra bản cập nhật sẽ đưa ra các yêu cầu GET bổ sung nếu cần.
Cách sử dụng nâng cao: phiên bản trình duyệt tối thiểu
Khi thêm nhiều API vào hệ thống tiện ích, phiên bản cập nhật của tiện ích chỉ hoạt động với các phiên bản trình duyệt mới hơn có thể được phát hành. Mặc dù bản thân Google Chrome được tự động cập nhật, nhưng có thể mất vài ngày thì phần lớn cơ sở người dùng mới cập nhật lên một bản phát hành mới bất kỳ. Để đảm bảo rằng một bản cập nhật nhất định sẽ chỉ áp dụng cho các phiên bản Google Chrome bằng hoặc cao hơn một phiên bản cụ thể, hãy thêm thuộc tính "prodversionmin" vào phần tử <app>
trong phản hồi cập nhật.
<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
<app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
<updatecheck codebase='http://myhost.com/mytestextension/mte_v2.crx' version='2.0' prodversionmin='3.0.193.0'/>
</app>
</gupdate>
Điều này sẽ đảm bảo rằng người dùng chỉ tự động cập nhật lên phiên bản 2 nếu họ đang chạy Google Chrome phiên bản 3.0.193.0 trở lên.