Автоматическое обновление

Мы хотим, чтобы расширения и приложения автоматически обновлялись по тем же причинам, что и сам 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/ . Система расширений использует следующие атрибуты для элементов <app> и <updatecheck> манифеста обновления:

аппид

Идентификатор расширения или приложения, созданный на основе хэша открытого ключа, как описано в разделе Упаковка . Вы можете найти идентификатор расширения или приложения Chrome, перейдя на страницу расширений ( chrome://extensions ).

Однако размещенные приложения не отображаются на странице «Расширения». Вы можете найти идентификатор любого приложения, выполнив следующие действия:

  • Откройте приложение. Вы можете сделать это, щелкнув его значок на странице «Новая вкладка».
  • Откройте консоль JavaScript. Это можно сделать, щелкнув значок гаечного ключа и выбрав «Инструменты» > «Консоль JavaScript» .
  • Введите следующее выражение в консоль JavaScript: chrome.app.getDetails().id . Консоль отображает идентификатор приложения в виде строки в кавычках.
кодовая база

URL-адрес файла .crx .

версия

Используется клиентом, чтобы определить, следует ли загружать файл .crx указанный в codebase . Оно должно соответствовать значению «версия» в файле manifest.json файла .crx .

XML-файл манифеста обновления может содержать информацию о нескольких расширениях, включая несколько элементов <app> .

Тестирование

Частота проверки обновлений по умолчанию составляет несколько часов, но вы можете принудительно установить обновление с помощью кнопки «Обновить расширения сейчас» на странице «Расширения».

Расширенное использование: параметры запроса

Базовый механизм автоматического обновления предназначен для минимизации работы на стороне сервера. Вы просто добавляете статический 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: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    • Версия: «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» к элементу <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 или более поздней версии.