Linux — единственная платформа, на которой пользователи Chrome могут устанавливать расширения, размещенные за пределами Интернет-магазина Chrome . В этой статье описывается, как упаковывать, размещать и обновлять файлы crx
с веб-сервера общего назначения. Если вы распространяете расширение или тему исключительно через Интернет-магазин Chrome , проконсультируйтесь по вопросам хостинга и обновления в Интернет-магазине .
Упаковка
Расширения и темы предоставляются в виде файлов .crx
. При загрузке через панель управления разработчика Chrome она автоматически создает файл crx
. Если файл crx
опубликован на личном сервере, его необходимо будет создать локально или загрузить из Интернет-магазина Chrome.
Загрузите .crx из Интернет-магазина Chrome.
Если расширение размещено в Интернет-магазине Chrome, файл .crx
можно загрузить с панели управления разработчика. Найдите расширение в разделе «Ваши объявления» и нажмите «Подробнее». Во всплывающем окне щелкните синюю ссылку main.crx
, чтобы загрузить его.
Загруженный файл может быть размещен на личном сервере. Это наиболее безопасный способ локального размещения расширения, поскольку содержимое расширения будет подписано Интернет-магазином Chrome. Это помогает обнаружить потенциальные атаки и несанкционированный доступ.
Создать .crx локально
Каталоги расширений преобразуются в файлы .crx
на странице управления расширениями. Перейдите по chrome://extensions/
в омнибоксе или откройте меню Chrome, наведите указатель на «Дополнительные инструменты», затем выберите «Расширения».
На странице управления расширениями включите режим разработчика, щелкнув тумблер рядом с режимом разработчика . Затем выберите кнопку РАСШИРЕНИЕ ПАКЕТА .
Укажите путь к папке расширения в поле Корневой каталог расширения, затем нажмите кнопку УПАКОВАТЬ РАСШИРЕНИЕ . Игнорируйте поле «Частный ключ» для первого пакета.
Chrome создаст два файла: файл .crx
и файл .pem
, содержащий закрытый ключ расширения.
Не потеряйте приватный ключ! Храните файл .pem
в секретном и безопасном месте; это будет необходимо для обновления расширения.
Обновление пакета .crx
Обновите файл .crx
расширения, увеличив номер версии в manifest.json
.
{
...
"version": "1.5",
...
}
}
{
...
"version": "1.6",
...
}
}
Вернитесь на страницу управления расширениями и нажмите кнопку УПАКОВАТЬ РАСШИРЕНИЕ . Укажите путь к каталогу расширений и расположение закрытого ключа.
На странице будет указан путь к обновленному упакованному расширению.
Пакет через командную строку
Упакуйте расширения в командной строке, вызвав chrome.exe
. Используйте флаг --pack-extension
, чтобы указать расположение папки расширения, и флаг --pack-extension-key
чтобы указать расположение файла закрытого ключа расширения.
chrome.exe --pack-extension=C:\myext --pack-extension-key=C:\myext.pem
Хозяин
Сервер, на котором размещены файлы .crx
, должен использовать соответствующие заголовки HTTP, чтобы пользователи могли установить расширение, щелкнув ссылку.
Google Chrome считает файл пригодным для установки, если выполняется одно из следующих условий:
- Файл имеет тип содержимого
application/x-chrome-extension
- Суффикс файла —
.crx
, и оба следующих условия верны:- Файл не обслуживается с HTTP-заголовком
X-Content-Type-Options: nosniff
- Файл обслуживается с одним из следующих типов контента:
- пустая строка
-
"text/plain"
-
"application/octet-stream"
-
"unknown/unknown"
-
"application/unknown"
-
"\*/\*"
- Файл не обслуживается с HTTP-заголовком
Наиболее распространенной причиной невозможности распознавания устанавливаемого файла является то, что сервер отправляет заголовок X-Content-Type-Options: nosniff
. Вторая наиболее распространенная причина заключается в том, что сервер отправляет неизвестный тип контента, которого нет в предыдущем списке. Чтобы устранить проблему с заголовком HTTP, измените конфигурацию сервера или попробуйте разместить файл .crx
на другом сервере.
Обновлять
Каждые несколько часов браузер проверяет установленные расширения на наличие URL-адреса обновления. Для каждого из них он отправляет запрос на этот URL-адрес в поисках XML-файла манифеста обновления.
- Содержимое, возвращаемое проверкой обновлений, представляет собой XML-документ манифеста обновления , в котором указана последняя версия расширения.
Если в манифесте обновления упоминается более поздняя версия, чем установленная, браузер загружает и устанавливает новую версию. Как и при обновлении вручную, новый файл .crx
должен быть подписан тем же закрытым ключом, что и текущая установленная версия.
Обновить URL
Расширения, размещенные на серверах за пределами Интернет-магазина Chrome, должны включать поле update_url
в файл manifest.json
.
{
"name": "My extension",
...
"update_url": "https://myhost.com/mytestextension/updates.xml",
...
}
Обновить манифест
Манифест обновления, возвращаемый сервером, должен быть 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>
Этот формат XML заимствован из формата, используемого Omaha — инфраструктурой обновлений Google. Система расширений использует следующие атрибуты для элементов <app>
и <updatecheck>
манифеста обновления:
- аппид
- Идентификатор расширения генерируется на основе хеша открытого ключа, как описано в разделе «Упаковка» . Идентификатор расширения отображается на странице управления расширениями.
- кодовая база
- URL-адрес HTTPS для файла
.crx
. - версия
- Используется клиентом, чтобы определить, следует ли загружать файл
.crx
, указанный вcodebase
. Оно должно соответствовать значению «версия» в файлеmanifest.json
файла.crx
.
XML-файл манифеста обновления может содержать информацию о нескольких расширениях, включая несколько элементов <app>
.
Тестирование
Частота проверки обновлений по умолчанию составляет несколько часов, но обновление можно принудительно установить с помощью кнопки «Обновить расширения сейчас» на странице управления расширениями.
Это запустит проверку всех установленных расширений.
Расширенное использование: параметры запроса
Базовый механизм автоматического обновления предназначен для того, чтобы сделать работу на стороне сервера такой же простой, как просто перетаскивание статического XML-файла на любой обычный веб-сервер, например Apache, и обновление этого XML-файла по мере выпуска новых версий расширений.
Разработчики, размещающие несколько расширений, могут проверять параметры запроса, которые указывают идентификатор и версию расширения в запросе на обновление. Включение этих параметров позволяет расширениям обновляться с одного и того же URL-адреса, используя динамический серверный код вместо статического XML-файла.
Формат параметров запроса:
?x=EXTENSION_DATA
Где EXTENSION_DATA
— это строка в формате URL-адреса:
id=EXTENSION_ID&v=EXTENSION_VERSION
Например, два расширения указывают на один и тот же URL-адрес обновления ( https://test.com/extension_updates.php
):
- Расширение 1
- ID: "ааааааааааааааааааааааа"
- Версия: "1.1"
- Расширение 2
- ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
- Версия: «0.4»
Запрос на обновление каждого отдельного расширения будет таким:
https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1
и
https://test.com/extension_updates.php?x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
Несколько расширений могут быть перечислены в одном запросе для каждого уникального URL-адреса обновления. В предыдущем примере, если у пользователя установлены оба расширения, два запроса объединяются в один:
https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
Если количество установленных расширений, использующих один и тот же URL-адрес обновления, настолько велико, что URL-адрес запроса GET слишком длинный (более 2000 символов или около того), при проверке обновлений при необходимости выдаются дополнительные запросы GET.
Расширенное использование: минимальная версия браузера
По мере добавления новых API в систему расширений может быть выпущена обновленная версия расширения, которая будет работать только с более новыми версиями браузера. Хотя сам Google Chrome обновляется автоматически, может пройти несколько дней, прежде чем большая часть пользовательской базы обновится до любой новой версии. Чтобы гарантировать, что данное обновление будет применяться только к версиям Google Chrome определенной версии или выше, добавьте атрибут prodversionmin к элементу <app>
в ответе на обновление.
<?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>
Это гарантирует, что пользователи будут автоматически обновляться до версии 2, только если они используют Google Chrome 3.0.193.0 или более поздней версии.