Мы хотим, чтобы расширения и приложения обновлялись автоматически по тем же причинам, что и сам Google Chrome: для внесения исправлений ошибок и безопасности, добавления новых функций или повышения производительности, а также улучшения пользовательских интерфейсов.
Если вы публикуете материалы с помощью панели инструментов разработчика Chrome , вам следует игнорировать эту страницу . Отправленные в Интернет-магазин Chrome материалы, прошедшие предварительный просмотр, автоматически становятся доступными в списке элементов Интернет-магазина Chrome и развертываются конечным пользователям.
Если вы размещаете файл CRX на веб-сервере и используете корпоративные политики для его передачи на управляемые устройства, продолжайте читать. Вам также следует прочитать Хостинг и упаковка .
Раньше, когда поддерживались сторонние расширения, можно было синхронно обновлять собственные двоичные файлы и расширение. Однако расширения, размещенные в Интернет-магазине Chrome, обновляются с помощью механизма обновления Chrome, который разработчики не контролируют. Разработчикам расширений следует быть осторожными при обновлении расширений, которые зависят от собственного двоичного файла (например, устаревших расширений, использующих NPAPI ).
Обзор
- Манифест может содержать поле update_url, указывающее на место для проверки обновлений.
- Содержимое, возвращаемое проверкой обновлений, представляет собой XML-документ манифеста обновления , в котором указана последняя версия расширения.
Каждые несколько часов браузер проверяет, есть ли у установленных расширений или приложений URL-адрес обновления. Для каждого из них он отправляет запрос на этот URL-адрес в поисках XML-файла манифеста обновления. Если в манифесте обновления упоминается более поздняя версия, чем установленная, браузер загружает и устанавливает новую версию. Как и при обновлении вручную, новый файл .crx
должен быть подписан тем же закрытым ключом, что и текущая установленная версия.
Обновить URL
Если вы размещаете собственное расширение или приложение, вам необходимо добавить поле «update_url» в файл manifest.json
, например:
{
"name": "My extension",
...
"update_url": "http://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='http://myhost.com/mytestextension/mte_v2.crx' version='2.0' />
</app>
</gupdate>
Этот формат XML заимствован из формата, используемого Omaha, инфраструктурой обновлений Google. Дополнительную информацию см. на странице http://code.google.com/p/omaha/ . Система расширений использует следующие атрибуты для
- аппид
Идентификатор расширения или приложения, созданный на основе хэша открытого ключа, как описано в разделе Упаковка . Вы можете найти идентификатор расширения или приложения Chrome, перейдя на страницу расширений ( chrome://extensions ).
Однако размещенные приложения не отображаются на странице «Расширения». Вы можете найти идентификатор любого приложения, выполнив следующие действия:
- Откройте приложение. Вы можете сделать это, щелкнув его значок на странице «Новая вкладка».
- Откройте консоль JavaScript. Это можно сделать, щелкнув значок гаечного ключа и выбрав «Инструменты» > «Консоль JavaScript» .
- Введите следующее выражение в консоль JavaScript:
chrome.app.getDetails().id
. Консоль отображает идентификатор приложения в виде строки в кавычках.
- кодовая база
URL-адрес файла
.crx
.- версия
Используется клиентом, чтобы определить, следует ли загружать файл
.crx
, указанный вcodebase
. Оно должно соответствовать значению «версия» в файлеmanifest.json
файла.crx
.
XML-файл манифеста обновления может содержать информацию о нескольких расширениях, включая несколько
Тестирование
Частота проверки обновлений по умолчанию составляет несколько часов, но вы можете принудительно установить обновление с помощью кнопки «Обновить расширения сейчас » на странице «Расширения».
Расширенное использование: параметры запроса
Базовый механизм автообновления разработан таким образом, чтобы сделать работу на стороне сервера такой же простой, как просто перетаскивание статического XML-файла на любой простой веб-сервер, например Apache, и обновление этого XML-файла по мере выпуска новых версий ваших расширений.
Более продвинутые разработчики могут воспользоваться тем, что мы добавляем в запрос манифеста обновления параметры, указывающие идентификатор расширения и версию. Затем они смогут использовать один и тот же URL-адрес обновления для всех своих расширений, указывая на URL-адрес, на котором выполняется динамический серверный код, а не на статический XML-файл.
Формат параметров запроса:
?x=_<extension_data>_
Где _<extension_data>_
— это строка в формате URL-адреса:
_id=<id>_&v=_<version>_
Например, предположим, что у вас есть два расширения, оба из которых указывают на один и тот же URL-адрес обновления ( http://test.com/extension_updates.php
):
- Расширение 1
- ID: "ааааааааааааааааааааааа"
- Версия: "1.1"
- Расширение 2
- ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
- Версия: «0.4»
Запрос на обновление каждого отдельного расширения будет следующим:
-
http://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1
-
http://test.com/extension_updates.php?x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
Несколько расширений могут быть перечислены в одном запросе для каждого уникального URL-адреса обновления. В приведенном выше примере, если у пользователя установлены оба расширения, два запроса объединяются в один:
http://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 в
<?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 или более поздней версии.