Автоматическое обновление расширения Chrome во время разработки с помощью CI / CD и update.xml
У меня в разработке находится расширение Chrome, локально являющееся приложением React.
Я настроил конвейер CI / CD, чтобы приложение React было построено с
yarn build
для создания каталога, содержащего файлы приложения и. Затем конвейер использует этот пакет npm для создания файла и загрузки его в общедоступное хранилище вместе с файлом, который был обновлен с новым номером версии и URL-адресом для нового
.crx
файл.
Я создал закрытый ключ (
key.pem
) локально и хранится в хранилище ключей, поэтому задание «упаковки» в конвейере CI каждый раз использует один и тот же закрытый ключ. Открытый ключ добавлен в
manifest.json
так что идентификатор приложения каждый раз остается неизменным.
Update2.xml
<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
<app appid='blahblahooaejaldnohkhmaedknkfogn'>
<updatecheck codebase='https://mypubliccrxstorage.blob.core.windows.net/crx/myapp-1.0.20210702.22.crx' version='1.0.20210702.22' />
</app>
</gupdate>
manifest.json
{
...
"manifest_version": 2,
"version": "1.0.20210702.22",
"key": "<my-public-key",
...
"update_url": "https://mypubliccrxstorage.blob.core.windows.net/crx/update2.xml"
}
Шаги по установке и обновлению:
- Перейти к
chrome://extensions/
> режим разработчика> загрузить распакованный> выбрать локальныйdist
каталог. - Распакованное расширение появится в списке расширений с идентификатором приложения:
blahblahooaejaldnohkhmaedknkfogn
- Выберите расширение и нажмите «Обновить».
Ожидаемый результат:
Chrome запрашивает удаленный файл, видит версию, более позднюю, чем изначально установленная, загружает и устанавливает новую
crx
файл из указанного места.
Фактический результат:
Расширение не обновляется.
Примечание: я загрузил
crt
сгенерированный CI / CD из места хранения и загруженный сюда. Открытый ключ, показанный этим онлайн-инструментом, соответствует значению
key
в manifest.json, и вычисленный идентификатор приложения совпадает с идентификатором в
update.xml
.
Чтобы копнуть немного глубже, я открыл Fiddler4 и проанализировал вызовы, сделанные Chrome. Хотя я не все понимаю, часть одного из ответов была:
<?xml version="1.0" encoding="UTF-8"?><gupdate xmlns="http://www.google.com/update2/response" protocol="2.0" server="prod"><daystart elapsed_days="5296" elapsed_seconds="28389"/><app appid="mgndgikekgjfcpckkfioiadnlibdjbkf" status="error-unknownApplication"/><app appid="apbllhlpimnkljppmmdbiipfbjjimjgj" cohort="1::" cohortname="" status="ok"><updatecheck _esbAllowlist="false" status="noupdate"/></app></gupdate>
Этот «идентификатор приложения» не мой (или это идентификатор приложения Chrome?), Но статус «error-unknownApplication», возможно, дает намек на то, что происходит.
2 ответа
Никакие настройки защиты в Chrome не позволяют обновлять расширения. Этот параметр также позволяет перетаскивать .crx в расширения Chrome.
Установка расширения chrome кнопкой "Загрузить распакованный" на
chrome://extensions
«привязывает» установку к файловой системе и не допускает обновлений.
Расширение необходимо установить через файл, чтобы обновление работало. Возможность сделать это была удалена в Chrome по соображениям безопасности.
Однако вы можете использовать версию разработчика Chrome, Chromium, чтобы установить
.crt
файл путем перетаскивания. Установка таким образом позволяет обновлять расширение, используя метод, указанный в исходном вопросе (если все настроено правильно).
В моем случае этот обходной путь был приемлемым.