Chỉ người dùng Linux mới có thể cài đặt những tiện ích được lưu trữ bên ngoài Cửa hàng Chrome trực tuyến. Chiến dịch này
bài viết mô tả cách đóng gói, lưu trữ và cập nhật tệp .crx
từ máy chủ cá nhân. Nếu
chỉ phân phối tiện ích hoặc chủ đề thông qua Cửa hàng Chrome trực tuyến, hãy tham khảo Cửa hàng trực tuyến
Lưu trữ và cập nhật.
Nội dung ngữ cảnh
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 Nhà phát triển Chrome
Trang tổng quan , trang tổng quan sẽ tự động tạo tệp .crx
. Nếu được xuất bản trên một trang
máy chủ, tệp .crx
sẽ cần được tạo cục bộ hoặc được tải xuống từ Cửa hàng Chrome trực tuyến.
Tải .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
trong cửa sổ bật lên, hãy nhấp vào đường liên kết màu xanh dương main.crx
để tải xuống.
Bạn có thể lưu trữ tệp đã tải xuống trên máy chủ cá nhân. Đây là cách an toàn nhất để lưu trữ cục bộ vì nội dung của tiện ích sẽ được Cửa hàng Chrome trực tuyến ký. Chiến dịch 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ộ
Các 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 hộp thư hoặc nhấp vào trình đơn Chrome, di chuột qua "Công cụ khác" sau đó
chọn "Tiện ích mở rộng".
Trên trang quản lý tiện ích, 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ế độ dành cho 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 Khoá riêng tư đối với gói cài đặt lần đầu tiên.
Chrome sẽ tạo hai tệp, một tệp .crx
và một tệp .pem
, trong đó có
khoá riêng tư.
Đừng để mất khoá riêng tư! Lưu tệp .pem
ở một nơi bí mật và an toàn; sẽ là
bạn cần 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 trang Quản lý tiện ích rồi nhấp vào nút Tiện ích mở rộng gói. Chỉ định đường dẫn đến thư mục tiện ích và vị trí của khoá cá nhân.
Trang sẽ cung cấp đường dẫn cho tiện ích đóng gói được cập nhật.
Đóng gói thông qua dòng lệnh
Đóng gói các tiện ích trong dòng lệnh bằng cách gọi chrome.exe
. Sử dụng --pack-extension
gắn cờ để chỉ định vị trí thư mục của 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
Lưu trữ
Máy chủ lưu trữ tệp .crx
phải sử dụng tiêu đề HTTP thích hợp để cho phép người dùng cài đặt
bằng cách nhấp vào liên kết.
Google Chrome coi tệp là có thể cài đặt nếu một trong các điều kiện sau xảy ra:
- Tệp này có loại nội dung là
application/x-chrome-extension
- Hậu tố tệp là
.crx
và cả hai điều 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 với một trong các loại nội dung sau:
- chuỗi trống
- "văn bản/đơn giản"
- "application/octet-stream"
- "không xác định/không xác định"
- "ứng dụng/không xác định"
- "*/*"
- 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 ra 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 nội dung 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.
Đang 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 yếu tố, điều này tạo ra một yêu cầu URL đó đang 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 của 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 cài đặt, trình duyệt
tải xuống và cài đặt phiên bản mới. Giống như với các bản cập nhật thủ công, bạn phải ký tệp .crx
mới
có cùng khoá riêng tư với phiên bản hiện được cài đặt.
Cập nhật URL
Những tiện ích được lưu trữ trên 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
của họ.
{
"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 được máy chủ trả về phải là 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 đang sử dụng. Chiến lược phát hành đĩa đơn
hệ thống tiện ích sử dụng các thuộc tính sau cho các phần tử <app>
và <updatecheck>
của
cập nhật tệp kê khai:
appid | Mã 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 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 đến tệp .crx . |
version | Được ứng dụng sử dụng để xác định xem có tải xuống tệp .crx do codebase chỉ định hay không. Phiên bản này phải khớp với giá trị của "phiên bản" trong tệp manifest.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 đưa vào <app> phần tử.
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 cập nhật bằng cách sử dụng cửa sổ Cập nhật các tiện ích ngay bây giờ trên Trang quản lý tiện ích.
Thao tác này sẽ bắt đầu kiểm tra tất cả tiện ích đã cài đặt.
Cách sử dụng nâng cao: yêu cầu tham số
Cơ chế tự động cập nhật cơ bản được thiết kế để giúp phía máy chủ hoạt động dễ dàng như chỉ thả tệp XML tĩnh lên 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 đó dưới dạng tệp mới các phiên bản tiện ích đượ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ã tiện ích và phiên bản trong yêu cầu cập nhật. Việc bao gồm các tham số này cho phép tiện ích cập nhật từ cùng một URL chạy mã động phía máy chủ thay vì tệp XML tĩnh.
Định dạng của các thông số yêu cầu là:
?x=EXTENSION_DATA
Trong đó EXTENSION_DATA
là một chuỗi được mã hoá URL có định dạng:
id=EXTENSION\_ID&v=EXTENSION\_VERSION
Ví dụ: 2 tiện ích trỏ đến cùng một URL cập nhật (https://test.com/extension_updates.php
):
- Tiện ích 1
- Mã nhận dạng: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- Phiên bản: "1.1"
- Tiện ích 2
- Mã nhận dạng: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
- 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. Dành cho đối tượng trên ví dụ: nếu người dùng đã cài đặt cả hai tiện ích, thì 2 yêu cầu này 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 để đáp ứng một yêu cầu GET URL quá dài (trên 2.000 ký tự) nên quá trình kiểm tra bản cập nhật sẽ đưa ra các yêu cầu GET bổ sung dưới dạng 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 hơn vào hệ thống tiện ích, phiên bản tiện ích được cập nhật sẽ hoạt động
chỉ với các phiên bản mới hơn của trình duyệt có thể được phát hành. Mặc dù Google Chrome vẫn được tự động cập nhật,
có thể mất vài ngày trước khi phần lớn cơ sở người dùng cập nhật lên bất kỳ bản phát hành mới nào. Người nhận
đảm bảo rằng một bản cập nhật cụ thể sẽ chỉ áp dụng cho các phiên bản Google Chrome ở mức hoặc cao hơn
phiên bản, hãy thêm "prodversionmin" cho phần 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>
Việc này sẽ đảm bảo rằng người dùng sẽ chỉ tự động cập nhật lên phiên bản 2 khi họ đang sử dụng Google Chrome 3.0.193.0 trở lên.