Pull to refresh

Как запускать расширения Хрома не из магазина WebStore

Reading time 10 min
Views 273K
Деcять довольно честных способов отъёма функции цензора у продукта большой компании. (10-й, самый практичный способ, если не считать его реализацию (шаблоны политик), добавлен в конец списка.)

Начиная с версии 35 (35.0.1916.114 m), как известно (англ.), браузер Google Chrome для ОС Windows перестал поддерживать установку новых и работу прежде установленных расширений, размещённых не в магазине Chrome WebStore. Это же касается и всех юзерскриптов, не размещённых в этом магазине. Группа Windows-пользователей — обширна, поэтому требуются новые инструкции о том, как с этим бороться. Линуксоидам и маководам это, к счастью, пока не грозит.


История



Причины ограничений — в большом размахе распространения вредоносных расширений, которые путём несложных инструкций по установке продвигаются на сайтах, неподконтрольных Гуглу.

Что может быть в установке расширений плохого? В первую очередь, если скрипт (расширение или юзерскрипт) начинает работать на домене, который содержит пользовательские данные, его конфиденциальную информацию, его пароли, логин — всё это становится доступным скрипту, и далее только моральные вопросы к разработчику скрипта определяют не «сольёт» ли он куда-либо эти данные. Несмотря на некоторое различие между Global Scope расширения и остальной части страницы, нет никакой проблемы внедрить скрипт в основную страницу (даже путём подгрузки внешнего изменяемого скрипта) и после этого уже ничем не отличаться от скриптов страницы. Всё, за что отвечает владелец сайта (домена) в отношении пользовательских данных, получает потенциально и автор расширения или юзерскрипта. Об этом постоянно ранее предупреждал Google Chrome при попытке установить скрипт или расширение. Это будет и сейчас, но с разницей в том, что браузер по умолчанию будет устанавливать расширения только из магазина Google WebStore.

Теперь для установки расширений нужно использовать более сложную технику, чтобы обойти новые препятствия. Варианты есть. Для корпоративных пользователей специальных расширений есть даже возможность в различных ОС «подписать» браузер на разрешение скачивания с определённого производственного сайта и даже возможность автоматической загрузки или обновления всех необходимых предприятию расширений — при первой установке браузера или при очередном запуске.

Дальнейший текст предназначен для людей, понимающих, какие могут быть последствия установки непроверенных расширений Хрома не из магазина компании Google.

Варианты обхода ограничений


Есть разные способы: простые и сложные, ручные и автоматические. Не выбирайте сразу первый — возможно, вас устроит следующий простой, или способ со сменой браузера (из семейства Webkit). Насколько удобен тот или иной способ, зависит от целей пользователя и от фактической надёжности разных трюков, которая будет проверена только со временем.

Есть официальные советы от Гугла для таких случаев, но там не на одной странице и неполно.

Способ 1, «не пакуй, да не упакован будешь». Самый честный, но официально не рекомендуемый. Распаковать и установить каждое расширение распакованным. Как минус, при каждом новом запуске браузера придётся подтверждать, что расширения установлены сознательно и отключать их не надо (скриншот leonid239 ).


Процесс установки распакованного расширения в Chrome

Этим способом возможно решить различные случаи запуска расширений и юзерскриптов в браузере — как новых, так и переставших внезапно работать после неуправляемого обновления браузера.

1.1. Установка скачанного откуда-либо расширения в виде файла *.crx

1.1.1. Вначале открыть страницу chrome://extensions/ и установить галочку «Режим разработчика», чтобы появились кнопки для установки и обновления расширений.

1.1.2. Взять файл расширения с окончанием «CRX», переименовать окончание в «ZIP» и распаковать полученный архив в папку (сделанную, например, в общей папке для расширений, созданной для этих целей. Пример: c:\myFiles\chromeExtensions\habrajax).

1.1.3. Установить распакованное расширение из папки нажатием на кнопку «Загрузить распакованное расширение», далее — выбрать каталог, в котором оно распаковано (удобно просто внести в поле имени папки путь к папке, затем Enter, чем идти мышью, выбирая путь).

1.2. Установка юзерскрипта — файла с расширением *.user.js

Юзерскрипт придётся оформить как простенькое расширение — «слепить» из файла *.user.js и файла манифеста manifest.json, за основу которого взять шаблон, в котором заменить вручную несколько полей, чтобы затем в списке расширений было удобно читать описание юзерскрипта (название, версию, описание. Затем оба файла положить в такую же поименованную папку, как в п. 1.1.2.

Всё это генерируется автоматически забрасыванием файла расширения на страницу chrome://extensions, как раньше. Лишь работать расширение не будет, и всё равно надо будет переходить к распакованному расширению по п. 1.3.1. Ручной процесс описан для понимания простоты и взаимосвязи юзерскрипта и расширения.

1.2.1. Скачать и получить файл юзерскрипта с расширением *.user.js.

1.2.2. Подготовить папку, например, c:\myFiles\chromeExtensions\habrPercentageRing\, в которую положить файл *.user.js.

1.2.3. В начале файла юзерскрипта посмотреть директивы скрипта — строчки вида
// @name ...
// @version ...
// @description ...
// @include ... (может быть несколько)
// @exclude ... (может быть несколько)

и заполнить данными (на месте троеточий) шаблон в файле manifest.json, который создать в той же новой папке.

Заготовка (шаблон) файла manifest.json:

{
   "content_scripts": [ {
      "exclude_globs": [ "все_домены_и_пути_из_exclude_директив" ],
      "exclude_matches": [  ],
      "include_globs": [ "все_домены_и_пути_из_include_директив" ],
      "js": [ "имя_файла_юзерскрипта.js" ],
      "matches": [ "http://*/*", "https://*/*" ],
      "run_at": "document_idle"
   } ],
   "converted_from_user_script": true,
   "description": "описание_вашего_юзерскрипта",
   "key": "можно_удалить_не мешает",
   "name": "имя_вашего_юзерскрипта",
   "version": "номер_версии_юзерскрипта",
   "manifest_version": 2
}

(заменяемые слова написаны одним словом с подчёркиваниями, чтобы удобно было выделять в редакторах двойным кликом);
номер_версии_юзерскрипта — до 4 чисел не более 32767, разделённые точками.
имя_файла_юзерскрипта.js — имя файла скрипта, лежащего рядом с файлом manifest.json

все_домены_и_пути_из_include_директив — в кавычках каждый, разделённые запятыми, со всеми метасимволами типа "*" — все пути из директив @include, которые пишутся в начале файла юзерскрипта;

все_домены_и_пути_из_exclude_директив — то же, для директив @exclude

Строчки без заменяемых слов должны присутствовать в манифесте, чтобы расширение на базе юзерскрипта работало. Все старательно внесённые данные помогут не запутаться в списке установленных расширений позже на странице chrome://extensions.

1.2.4. Установить расширение, как в п. 1.1.3.

1.3. Восстановление ранее установленного расширения или юзерскрипта

Если оказалось, что браузер «заупрямился» и отключил ранее установленное расширение, отказываясь выполнять его далее — не обязательно скачивать и устанавливать его снова.

1.3.1. Найдём каталог с этим расширением на системном диске (например, в WinXP — в каталоге С:\Documents and Settings\<имя_пользователя>\, в Win7 — С:\Users\<имя_пользователя>\ (открыть скрытые папки), используя длинное кодовое слово типа «gggcejmogjjjkpidlfinoaonmkpmegnn», написанное после слова «ID:» в блоке описания расширения.

1.3.2. Используем папку, которую браузер успел сделать ранее для этого расширения или юзерскрипта. Обычно, во вложенной папке имеется папка с номером версии расширения. Выбираем нужную — и загружаем как распакованное расширение (можно просто вставить путь к папке в поле Browse for Folder — Folder).

Лучше, конечно, перенести папки с ценными расширениями в другое место (как в прежних примерах, в c:\myFiles\chromeExtensions), иначе при удалении браузера из системы (или пользователя) они могут удалиться.

1.3.3. Это ещё не конец приключений — в расширении, сделанном на базе юзерскрипта, может быть не прописана в файле manifest.json строчка «manifest_version»: 2, о чём браузер скажет, отказываясь его установить. Пропишем
    "manifest_version": 2,

в первом уровне структуры JSON эту пару «ключ-значение».

1.3.4. Загрузилось? Теперь не забудьте установить галочку «Включить».

(конец вариантов)

После подобных установок в списке расширений будет отображаться путь к каталогу, в котором находится каждое распакованное расширение. Как плюс для разработчиков, крайне просто его будет самостоятельно модифицировать. После модификации потребуется лишь ещё раз установить через кнопку «Загрузить распакованное расширение» (далее — выбрать каталог, в котором оно распаковано). Даже предварительно удалять имеющееся в списке — не обязательно. Действие сводится к нажатию 2 кнопок, если браузер помнит путь к каталогу расширения. Или просто нажать кнопку «Обновить расширения», если надо обновить все.

Да, работа ручная и бессмысленная — ранее это делал браузер. Чтобы её избежать, надо пользоваться «девелоперской» версией браузера, в котором по-прежнему можно ставить юзерскрипты затаскиванием или использовать другие «костыли» и прочие гениальные сложности. Перечисляем далее способы обеспечения установки расширений другими хитрыми путями.

Если будет желание «усовершенствовать» скрипт, превратив его в расширение, добавлением новых параметров в манифест, то тогда пропадёт важное преимущество юзерскрипта — его возможная кроссбраузерность, когда один и тот же скрипт может работать в 3 браузерах, включая старую Оперу. И в 4-м — Safari, если его таким же нехитрым путём заставить выглядеть как расширение Safari (по своим правилам, которые здесь описывать не будем).

Что ещё характерно — если у вас есть «легальное» точно такое же расширение Хрома из магазина WebStore с тем же именем и версией, оно не будет стираться распакованным вариантом расширения, а оба будут работать одновременно. Одно из них разумно отключить во избежание неожиданных эффектов «наложения».

Способ 2, «химия командной строки». Простой, но с неизвестной длительностью поддержки. Придётся запускать из специального ярлыка (shortcut).

2.1 Запустить браузер из командной строки с параметром "--enable-easy-off-store-extension-install". Это можно сделать из консоли, но удобнее для будущего — через ярлык, в котором дописывается параметр. Пример:
"C:\Program Files\Google\Chrome\Application\chrome.exe" --enable-easy-off-store-extension-install



2.2. Если был сделан ярлык с параметром — запускать браузер кликом по нему или комбинацией назначенных клавиш. Возможен незапуск, если в момент запуска работал скрытый процесс ранее запущенного Хрома без параметра (проверить и убить в менеджере задач, Ctrl-Shift-Esc). Скрытые процессы остаются, если установлена настройка в браузере «Продолжать работу приложений в фоновом режиме после закрытия браузера».

Способ 3, «химия реестра». Тоже простой, но с неизвестной длительностью поддержки. По отзывам, он работает в версии 35.0.1916.114 m, но не работает в версии Хрома 35.0.1916.153. Был описан 16.03.2014 в http://my-chrome.ru/2014/03/yes-we-can/. У некоторых работает и в обновлённых версиях старше 114 m, судя по отзывам, поэтому условия срабатывания ещё предстоит выяснять.

3.1. Для 64-битной Windows 7 в реестре по пути HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Google \ Update \ ClientState \ {8A69D345-D564-463C-AFF1-A69D9E530F96} прописываем вместо ap: "-multi-chrome" или «1.1-beta-multi-chrome» (тип REG-SZ) значение «2.0-dev-multi-chrome» (без кавычек):

Для Win XP путь будет такой: HKEY_LOCAL_MACHINE \ SOFTWARE \ Google \ Update \ ClientState \ {8A69D345-D564-463C-AFF1-A69D9E530F96}

3.2. Повторить то же для папки {4DC8B4CA-1BDA-483e-B5FA-D3C12E15B62D} и такого же параметра в ней.
Пишут, что может помочь и такое значение: «2.0-Canary-multi-chrome».

3.3. Перезапуск браузера, полный, с убиванием скрытых процессов. Признак того, что расширения стали работать — активный чекбокс для включения расширения.

(в данном примере кроссбраузерный юзерскрипт (для Хабра) был взят прямо из папки его использования в Firefox, и там же был добавлен manifest.json, что уменьшило количество размещений скрипта)

3.4. Включить расширение установкой чекбокса.

Смысл фокуса в том, что сообщаем браузеру, что это якобы DEV-версия браузера. Он, как побочный эффект, начинает хотеть обновиться до DEV-версии, что видно в попапе «About...».

Если в реестре не нашлось этого пути — попробуйте поискать поиском по реестру значение «multi-chrome» и заменить все такие находки.

Способ 4, «троянский конь в магазине». Ставим расширение SimpleExtManager, после чего средствами настроек в этом расширении можем включать отключённые чекбоксы при именах всех расширений независимо от их происхождения. Нечаянно эта лазейка оказалась работающей. Правда, включать чекбоксы придётся при каждом полном (холодном) запуске браузера. Но всё равно, налицо — красивый троянский эффект, пусть и с ручным приводом.

Способ 5: ещё проще, но без перспектив: установить старую версию браузера Chrome и запретить в ней обновления.

Раз уж мы собрались рассмотреть все способы, рассмотрим и самые странные. Из комбинации двух нелогичных действий, действительно — получается решение. Первое нелогичное — обречь себя на устаревший браузер. Второе нелогичное — отключить обновления. От первого появляются дыры в безопасности, от второго — тоже. Но расширения будут жить. Может быть, кого-то тоже это устроит и кто-то давно мечтает отключить обновления Хрома, но до сих пор не знает, как.

Старые версии брать отсюда.
Для отключения обновлений подсказывают такой батник:
reg ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Update" /v UpdateDefault /t REG_DWORD /d 0 /f
reg ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Update" /v AutoUpdateCheckPeriodMinutes /t REG_DWORD /d 0 /f
reg ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Update" /v DisableAutoUpdateChecksCheckboxValue /t REG_DWORD /d 1 /f
reg ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Update" /v Update{8A69D345-D564-463C-AFF1-A69D9E530F96} /t REG_DWORD /d 0 /f

Или такой вариант с hosts-файлом.
3-й способ: в chrome://plugins/.

Способ 6, «прикинься разработчиком». Эту возможность оставил тебе Гугл. Если пользоваться версией браузера, скачанной с Dev- или Canary- канала, ограничения работоспособности немагазинных расширений не будет. Canary не будет конфликтовать с установленным в системе Хромом стабильной версии.

Минусы — очевидно, в том, что надо заново собирать свои настройки браузера, а затем следить за версиями и переходить на новые. Не всем «жизнь ради браузера» подходит.

Добрый Гугл обещает не запрещать установку расширений в Dev Channel и Canary-версиях. Тут всё логично: на эксперименты идут разработчики, маргиналы, а они знают, чем грозит установка непроверенных расширений. Другим же рекомендовать это не с руки, потому что выглядит как принудительное привязывание к непроверенным, сырым версиям браузера. Даже большинству разработчиков это не нужно — у каждого есть много других задач и увлечений… Но, продолжим парад странностей.

Способ 7, «думай иначе» («think different»). Свежая мысль Apple: «Зачем нам Windows?». Ох, как же это банально! Переходим на Mac или Linux.

Способ 8, «думай иначе, но в Windows». Даже так? Да. Переходим на другой браузер, основанный на Chromium. Если он поддерживает расширения, то он не будет иметь залочивания расширений на гугловском магазине.

Первый кандидат для выбора — это, конечно, Chromium: браузер, служащий основой для Chrome, но без закрытых (с точки зрения кодов и политики компании) технологий Google.

Способ 9, «будь боссом». Для уважаемых владельцев корпоративных сетей предприятия (громко сказано, но всё гораздо проще) есть способ иметь собственный домен, с которого пользователи могут установить расширения.

Способ 10, «шаблоны политик». Перевод и инструкции будут на днях (27.06.2014), пока что — ссылка (англ.) на оригинал, присланная читателем kvark (не с Хабра). Способ сложен в настройке и прописывании каждого расширения на начальном этапе, зато не требует, как в способе 1, подтверждения при каждом запуске браузера.

В сравнении с вышеперечисленными способами — лучше не усложнять себе жизнь, если нет реальной необходимости придерживаться браузера Chrome и политики предприятия по установке расширений.
Tags:
Hubs:
+31
Comments 37
Comments Comments 37

Articles