Часто задаваемые вопросы

Если вы не нашли здесь ответа на свой вопрос, воспользуйтесь часто задаваемыми вопросами Интернет-магазина Chrome , тегом [google-chrome-extension] в Stack Overflow , группой chromium-extensions или справкой магазина .

Общий

Что такое расширения Google Chrome?

Расширения Google Chrome — это приложения, которые запускаются в браузере Chrome и предоставляют дополнительные функции, интеграцию со сторонними веб-сайтами или службами, а также настраиваемые возможности просмотра.

Как настроить Chrome для разработки расширений?

Если вы используете версию Chrome, поддерживающую расширения, у вас уже есть все необходимое, чтобы начать писать собственное расширение. Вы можете начать с включения режима разработчика.

Нажмите значок меню Chrome и выберите «Расширения» в меню «Инструменты» . Убедитесь, что флажок «Режим разработчика» в правом верхнем углу установлен. Теперь вы можете перезагрузить расширения, загрузить распакованный каталог файлов, как если бы это было упакованное расширение, и многое другое. Полное руководство см. в разделе «Начало работы» .

Какие технологии используются для написания расширений для Chrome?

Расширения пишутся с использованием тех же стандартных веб-технологий, которые разработчики используют для создания веб-сайтов. HTML используется в качестве языка разметки контента, CSS — для стилизации, а JavaScript — для написания сценариев. Поскольку Chrome поддерживает HTML5 и CSS3, разработчики могут использовать в своих расширениях новейшие открытые веб-технологии, такие как анимация Canvas и CSS. Расширения также имеют доступ к нескольким API-интерфейсам JavaScript , которые помогают выполнять такие функции, как кодирование JSON и взаимодействие с браузером.

Выгружаются ли расширения из Интернета при каждой загрузке браузера?

Расширения загружаются браузером Chrome при установке и впоследствии запускаются с локального диска для повышения производительности. Однако если новая версия расширения будет опубликована в Интернете, она будет автоматически загружена в фоновом режиме всем пользователям, у которых установлено это расширение. Расширения также могут в любое время отправлять запросы на удаленный контент для взаимодействия с веб-службой или получения нового контента из Интернета.

Как определить, какая версия Chrome развернута на каком канале?

Чтобы определить, какая версия Chrome в настоящее время доступна на каждой из платформ, посетите сайт omahaproxy.appspot.com . На этом сайте вы увидите данные в формате, похожем на:

cf,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cf,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cf,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,canary,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cros,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cros,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####

Каждая строка представляет информацию о различных комбинациях платформ и каналов. Перечисленные платформы: cf (Google Chrome Frame), linux , mac , win и cros (Google ChromeOS). Перечисленные каналы — canary , dev , beta и stable . Два числа из четырех частей после канала обозначают текущую и предыдущую версии Chrome, развернутые на этой комбинации платформы и канала. Остальная информация — это метаданные о том, когда выпуски были впервые выпущены, а также номера ревизий, связанные с каждой сборкой.

Возможности

Могут ли расширения выполнять междоменные запросы Ajax?

Да. Расширения могут выполнять междоменные запросы. См. эту страницу для получения дополнительной информации.

Могут ли расширения использовать сторонние веб-сервисы?

Да. Расширения способны выполнять междоменные запросы Ajax, поэтому они могут напрямую вызывать удаленные API. API, предоставляющие данные в формате JSON, особенно просты в использовании.

Могут ли расширения кодировать/декодировать данные JSON?

Да, поскольку V8 (движок JavaScript Chrome) изначально поддерживает JSON.stringify и JSON.parse, вы можете использовать эти функции в своих расширениях, как описано здесь, без включения каких-либо дополнительных библиотек JSON в свой код.

Могут ли расширения хранить данные локально?

Да, расширения могут использовать localStorage для постоянного хранения строковых данных. Используя встроенные функции JSON Chrome, вы можете хранить сложные структуры данных в localStorage. Для расширений, которым необходимо выполнять SQL-запросы к хранимым данным, Chrome реализует клиентские базы данных SQL , которые также можно использовать.

Могут ли расширения использовать OAuth?

Да, существуют расширения, которые используют OAuth для доступа к API удаленных данных. Большинству разработчиков удобно использовать библиотеку OAuth JavaScript , чтобы упростить процесс подписания запросов OAuth.

Могут ли расширения создавать пользовательский интерфейс за пределами отображаемой веб-страницы?

Да, ваше расширение может добавлять кнопки в пользовательский интерфейс браузера Chrome. Дополнительные сведения см. в разделах «Действия браузера» и «Действия страницы» .

Расширение также может создавать всплывающие уведомления, которые существуют за пределами окна браузера. Дополнительную информацию см. в документации по уведомлениям на рабочем столе .

Могут ли расширения прослушивать нажатия на вкладки Chrome и кнопки навигации?

Нет. Расширения ограничены прослушиванием событий, описанных в документации API .

Могут ли два расширения взаимодействовать друг с другом?

Да, расширения могут передавать сообщения другим расширениям. Дополнительную информацию смотрите в документации по передаче сообщений .

Могут ли расширения использовать Google Analytics?

Да, поскольку расширения созданы так же, как и веб-сайты, они могут использовать Google Analytics для отслеживания использования. Однако вам необходимо изменить код отслеживания, чтобы получить HTTPS-версию библиотеки Google Analytics. Дополнительную информацию о том, как это сделать, смотрите в этом уроке .

Могут ли расширения изменять URL-адреса chrome://?

Нет. API-интерфейсы расширений были разработаны для минимизации проблем обратной совместимости, которые могут возникнуть при выпуске новых версий браузера. Разрешение сценариев контента на URL-адресах chrome:// будет означать, что разработчики начнут полагаться на то, что DOM, CSS и JavaScript этих страниц останутся прежними. В лучшем случае эти страницы не могли бы обновляться так быстро, как они обновляются сейчас. В худшем случае это может означать, что обновление одной из этих страниц может привести к поломке расширения, в результате чего ключевые части браузера перестанут работать для пользователей этого расширения.

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

Могут ли расширения открывать всплывающие окна с действиями браузера/страницы без взаимодействия с пользователем?

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

Могут ли расширения сохранять всплывающие окна открытыми после того, как пользователь от них отходит?

Нет, всплывающие окна автоматически закрываются, когда пользователь фокусируется на какой-либо части браузера за пределами всплывающего окна. Невозможно оставить всплывающее окно открытым после того, как пользователь щелкнул мышью.

Можно ли получать уведомления о расширениях при их установке/удалении?

Вы можете прослушивать событие runtime.onInstalled , чтобы получать уведомления об установке или обновлении вашего расширения или об обновлении самого Chrome. Соответствующего события для удаления вашего расширения не существует.

Разработка

Как мне создать пользовательский интерфейс для моего расширения?

Расширения используют HTML и CSS для определения своих пользовательских интерфейсов, поэтому вы можете использовать стандартные элементы управления формой для создания пользовательского интерфейса или стилизовать интерфейс с помощью CSS, как если бы вы использовали веб-страницу. Кроме того, расширения могут добавлять некоторые ограниченные элементы пользовательского интерфейса в сам Chrome.

Какой объем данных я могу хранить в localStorage?

Расширения могут хранить до 5 МБ данных в localStorage.

Как создать меню параметров для моего приложения?

Вы можете позволить пользователям устанавливать параметры вашего расширения, создав страницу параметров , которая представляет собой простую HTML-страницу, которая будет загружаться, когда пользователь нажимает кнопку «Параметры» для вашего расширения. Эта страница может считывать и записывать настройки в localStorage или даже отправлять параметры на веб-сервер, чтобы их можно было сохранять в разных браузерах.

Какие инструменты отладки доступны разработчикам расширений?

Встроенные инструменты разработчика Chrome можно использовать для отладки расширений, а также веб-страниц. Дополнительную информацию см. в этом руководстве по отладке расширений .

Почему совпадения по подстановочным знакам не работают для доменов верхнего уровня (TLD)?

Вы не можете использовать шаблоны соответствия с подстановочными знаками, такие как http://google.*/* для сопоставления TLD (например http://google.es и http://google.fr ) из-за сложности фактического ограничения такого соответствия только желаемые домены.

В примере http://google.*/* будут сопоставляться домены Google, а также http://google.someotherdomain.com . Кроме того, многие сайты не владеют всеми TLD своего домена. В качестве примера предположим, что вы хотите использовать http://example.*/* для сопоставления http://example.com и http://example.es , но http://example.net является враждебным сайтом. Если в вашем расширении есть ошибка, враждебный сайт потенциально может атаковать ваше расширение, чтобы получить доступ к расширенным привилегиям вашего расширения.

Вам следует явно указать домены верхнего уровня, на которых вы хотите запустить расширение.

Почему API управления не генерирует события при установке или удалении моего расширения?

API управления был предназначен для помощи в создании новых расширений замены страниц вкладок. Он не предназначен для запуска событий установки/удаления текущего расширения.

Как расширение может определить, запускается ли оно в первый раз?

Вы можете прослушать событие runtime.onInstalled . См. этот раздел часто задаваемых вопросов .

Особенности и ошибки

Кажется, я нашел ошибку! Как мне убедиться, что это исправлено?

При разработке расширения вы можете обнаружить поведение, которое не соответствует документации расширения и может быть результатом ошибки в Chrome. Лучше всего убедиться, что соответствующий отчет о проблеме отправлен, и что у команды Chromium достаточно информации для воспроизведения поведения.

Чтобы убедиться в этом, необходимо выполнить следующие шаги:

  1. Придумайте минимальное тестовое расширение, демонстрирующее проблему, о которой вы хотите сообщить. Это расширение должно содержать как можно меньше кода для демонстрации ошибки — обычно это должно быть 100 строк кода или меньше. Часто разработчики обнаруживают, что не могут воспроизвести свои проблемы таким образом, что является хорошим показателем того, что ошибка находится в их собственном коде.
  2. Выполните поиск в системе отслеживания проблем на сайте http://crbug.com , чтобы узнать, сообщал ли кто-нибудь о подобной проблеме. Большинство проблем, связанных с расширениями, хранятся в разделе компонент=Платформа>Расширения , поэтому, чтобы найти ошибку расширения, связанную, например, с функцией chrome.tabs.executeScript, найдите " component=Platform>Extensions Type=Bug chrome.tabs.executeScript », который выдаст вам этот список результатов .
  3. Если вы обнаружили ошибку, описывающую вашу проблему, щелкните значок звездочки, чтобы получить уведомление, когда ошибка получит обновление. Не отвечайте на ошибку, говоря «я тоже» или спрашивая «когда это будет исправлено?» ; такие обновления могут привести к отправке сотен электронных писем. Добавляйте комментарий только в том случае, если у вас есть информация (например, лучший тестовый пример или предлагаемое исправление), которая может оказаться полезной.
  4. Если вы не нашли подходящей ошибки, которую можно было бы отметить, отправьте новый отчет о проблеме по адресу http://crbug.com/new . Будьте как можно более откровенны при заполнении этой формы: выберите описательное название, объясните шаги по воспроизведению ошибки и опишите ожидаемое и фактическое поведение. Прикрепите тестовый пример к отчету и при необходимости добавьте скриншоты. Чем проще ваш отчет другим людям воспроизвести вашу проблему, тем больше вероятность того, что ваша ошибка будет оперативно исправлена.
  5. Подождите, пока ошибка обновится. Большинство новых ошибок обрабатываются в течение недели, хотя иногда обновление может занять больше времени. Не отвечайте на сообщение об ошибке, чтобы спросить, когда проблема будет исправлена. Если ваша ошибка не была изменена в течение двух недель, отправьте сообщение в дискуссионную группу со ссылкой на вашу ошибку.
  6. Если вы изначально сообщили об ошибке в группе обсуждения и были перенаправлены на этот раздел часто задаваемых вопросов, ответьте на исходную тему, указав ссылку на ошибку, которую вы отметили или о которой сообщили. Это облегчит другим пользователям, столкнувшимся с той же проблемой, поиск правильной ошибки.

У меня есть запрос на функцию! Как я могу сообщить об этом?

Если вы обнаружите функцию (особенно если она связана с экспериментальным API), которую можно добавить для улучшения процесса разработки расширений, убедитесь, что соответствующий запрос подан в систему отслеживания проблем.

Чтобы убедиться в этом, необходимо выполнить следующие шаги:

  1. Выполните поиск в системе отслеживания проблем на сайте http://crbug.com , чтобы узнать, запрашивал ли кто-нибудь подобную функцию. Большинство запросов, связанных с расширениями, хранятся в разделе компонент=Платформа>Расширения , поэтому, чтобы найти запрос на функцию расширения, связанный с сочетаниями клавиш (например), найдите « component=Platform>Extensions Type=Feature shortcuts », что даст вам это список результатов .
  2. Если вы нашли заявку, соответствующую вашему запросу, щелкните значок звездочки, чтобы получить уведомление, когда ошибка получит обновление. Не отвечайте на ошибку, говоря «я тоже» или спрашивая «когда это будет реализовано?» ; такие обновления могут привести к отправке сотен электронных писем.
  3. Если вы не нашли подходящего билета для звезды, отправьте новый запрос по адресу http://crbug.com/new . Заполняя эту форму, будьте максимально подробны: выберите описательное название и точно объясните, какую функцию вы хотели бы использовать и как планируете ее использовать.
  4. Подождите, пока билет обновится. Большинство новых запросов обрабатываются в течение недели, хотя иногда обновление может занять больше времени. Не отвечайте на запрос с вопросом, когда эта функция будет добавлена. Если ваш билет не был изменен в течение двух недель, отправьте сообщение в дискуссионную группу со ссылкой на ваш запрос.
  5. Если вы изначально сообщили о своем запросе в группе обсуждения и были перенаправлены на эту запись часто задаваемых вопросов, ответьте на исходную тему, указав ссылку на заявку, которую вы отметили или открыли. Это облегчит поиск нужного билета другим пользователям с таким же запросом.