Cài đặt tiện ích trên Linux

Chỉ người dùng Linux mới 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áy chủ cá nhân. Nếu 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 Lưu trữ và cập nhật cửa hàng trực tuyến.

Nội dung ngữ cảnh

Các 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 này sẽ tự động tạo tệp .crx. Nếu được phát hành trên máy chủ cá nhân, thì tệp .crx sẽ cần được tạo cục bộ hoặ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, thì 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ải .crx xuống từ Trang tổng quan dành cho nhà phát triể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ữ 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ý. Việc 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 ominibox hoặc nhấp vào trình đơn Chrome, di chuột qua "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ế độ dành cho nhà phát triển. Sau đó, chọn nút MỞ RỘNG GÓI.

Chọn Chế độ nhà phát triển rồi chọn Nhấp vào Gói tiện ích

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 Tiện ích. Bỏ qua trường Khoá riêng tư cho gói lần đầu.

Chỉ định Đường dẫn tiện ích, rồi nhấp vào Gói tiện ích

Chrome sẽ tạo hai tệp, một tệp .crx và một tệp .pem, chứa khoá riêng tư của tiện ích.

Tệp tiện ích đóng gói

Đừng làm mất khoá riêng tư! Giữ tệp .pem ở nơi an toàn và bí mật; bạn cần phải cập nhật đuôi tệp.

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 DỮ LIỆUiện ích đóng gói. Chỉ định đường dẫn đến thư mục tiện ích và vị trí của khoá riêng tư.

Cập nhật tệp tiện ích

Trang này sẽ cung cấp đường dẫn cho tiện ích đóng gói đã cập nhật.

Cập nhật tệp tiện ích

Đó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 cờ --pack-extension để chỉ định vị trí của thư mục tiện ích và cờ --pack-extension-key để chỉ định vị trí 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ữ các 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 các điều sau đây là đúng:

  • Tệp có loại nội dung application/x-chrome-extension
  • Hậu tố của tệp là .crxcả 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
    • "text/plain"
    • "application/octet-stream"
    • "không xác định/không xác định"
    • "ứng dụng/không xác định"
    • "*/*"

Lý do phổ biến nhất khiến không thể 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 loại nội dung không xác định — loại 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

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 URL, trình phân tích cú pháp sẽ yêu cầu URL đó để tìm tệp XML kê khai cập nhật.

  • Nội dung trả về trong quá trình kiểm tra bản cập nhật là một 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. Giống như các 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ư như phiên bản hiện được cài đặt.

Lưu ý: Để bảo vệ quyền riêng tư của người dùng, Google Chrome không gửi bất kỳ tiêu đề Cookie nào có yêu cầu tự động cập nhật tệp kê khai và bỏ qua mọi tiêu đề Set-Cookie trong các phản hồi cho các yêu cầu đó.

URL cập nhật

Các 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 chúng.

{
  "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 vay từ định dạng được 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 các phần tử <app><updatecheck> của tệp kê khai cập nhật:

appidMã tiện ích được tạo dựa trên hàm băm của khóa công khai, như mô tả trong phần đóng gói. Mã của tiện ích 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Ứng dụng dùng để xác định xem có tải xuống tệp .crx do codebase chỉ định hay không. Giá trị này phải khớp với giá trị "version" 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 tiện ích bằng cách đưa vào nhiều phần tử <app>.

Kiểm thử

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 nút Cập nhật tiện ích ngay trên Trang quản lý tiện ích.

Cập nhật tiện ích ngay

Thao tác này sẽ bắt đầu quá trình kiểm tra tất 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 phía máy chủ hoạt động dễ dàng như chỉ cần thả 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) rồi cập nhật tệp XML đó khi phiên bản tiện ích mới được phát hành.

Các 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. Các tham số này cho biết mã 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 đang chạy mã phía máy chủ động thay vì 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 URL được mã hoá có định dạng:

id=EXTENSION\_ID&v=EXTENSION\_VERSION

Ví dụ: 2 phần mở rộng 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: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • Phiên bản: "1.1"
  • Tiện ích 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

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. Trong ví dụ trên, nếu người dùng đã cài đặt cả hai tiện ích, thì hai 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 đến mức URL yêu cầu GET quá dài (hơn 2000 ký tự trở lên), thì quá trình kiểm tra bản cập nhật sẽ đưa ra thêm 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 một 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ù Google Chrome được tự động cập nhật, nhưng 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ản phát hành mới bất kỳ. Để đả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 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ử 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 đả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 3.0.193.0 trở lên.