Запускайте упакованные приложения Chrome на вкладке браузера

Я хотел бы использовать новые API, предоставляемые для упакованных приложений Chrome, но также хочу сохранить возможность открывать некоторые локальные URL-адреса в моей текущей среде браузера, возможно ли это? Все учебные пособия по упакованным приложениям сосредоточены на создании отдельного окна и использовании приложения в качестве основного участника системы.

Может быть, можно как-то использовать chrome.socket и другие API как обычно, возможно, даже только в режиме разработчика?


person Nik    schedule 12.01.2013    source источник


Ответы (2)


Нет, это невозможно по дизайну. Пакетные приложения Chrome запускаются отдельно от браузера и не имеют доступа к функциям браузера, таким как вкладки. Самое близкое, что вы можете получить, это открыть внешний (не в упакованном приложении) URL-адрес в браузере через window.open.

Однако вы можете эмулировать браузер, используя тег webview. См. код примера браузера, чтобы узнать, как это сделать.

Вы также можете установить расширение, которое взаимодействует с вашим упакованным приложением, используя только что выпущенный API обмена сообщениями. См. пример обмена сообщениями, чтобы узнать, как это сделать. Это довольно просто, если вы знаете app и идентификаторы расширений.

person mangini    schedule 15.01.2013
comment
Спасибо! Я думал, что это невозможно, но надеялся, что есть обходной путь. - person Nik; 16.01.2013
comment
Этот ответ неверен. window.open можно использовать на фоновой странице, чтобы позволить упакованному приложению открываться в окне браузера. - person kzahel; 04.06.2015
comment
Нет, это не неправильно. Содержимое упакованных приложений не может открываться в окнах браузера. Вы можете открыть обычный URL-адрес с помощью window.open, как я уже упоминал в своем ответе, но вы НЕ МОЖЕТЕ открыть локальный контент вашего приложения в окне браузера, если вы не используете веб-просмотр. Может быть, вы думаете о старых, устаревших пакетных приложениях? (они запускались на вкладках, а не в отдельных окнах) - person mangini; 08.06.2015
comment
Независимо от того, рекомендовано это или задокументировано, оно работает и действительно используется очень популярным приложением: chrome.google.com/webstore/detail/videostream-for-google-ch/ (их нужно было запускать на вкладке браузера, чтобы они могли взаимодействовать с Google Cast расширение, которое не предоставляет API для платформы Chrome, поэтому имеет смысл, что их нужно будет запускать на вкладке) - person kzahel; 15.06.2015
comment
@kzahel, если я правильно понимаю код VideoStream, для этого они используют сочетание url_handlers и обмена сообщениями. Это аккуратно, и кажется, что содержимое приложения работает на вкладке, но это не так. - person mangini; 16.06.2015
comment
Хорошо, я просто наблюдаю, что URL-адрес действительно chrome-extension:// и тот факт, что я смог открыть вкладку с ресурсами внутри упакованного приложения. Попробуйте window.open с фоновой страницы, и вы увидите, что он открывает окно приложения как вкладку браузера и имеет полные разрешения API приложения. Некоторые вещи ведут себя странно, однако кнопка перезагрузки страницы и браузера назад не будут работать правильно. Вкладку нужно открывать через фоновую страницу. - person kzahel; 16.06.2015
comment
Да, это известная проблема (code.google.com/p/ chromium/issues/detail?id=252464), и это, скорее всего, будет исправлено в будущем, так что я бы не стал на это полагаться ни на что, кроме удовлетворения вашего любопытства :) - person mangini; 16.06.2015
comment
@mangini, но если мы используем веб-просмотр, нет возможности перетаскивать вкладки в основные окна Chrome, верно? Кроме того, что касается метода обмена сообщениями, о котором вы говорите, есть ли способ сделать окно приложения невидимым, чтобы пользователь видел только вкладку (расширение Chrome)? - person Pacerier; 23.06.2015
comment
БИТЫЕ ССЫЛКИ! БИТЫЕ ССЫЛКИ! - person ejbytes; 21.08.2016

Изменить: это не поддерживается / может сломаться в Chrome 44/45+ или около того. Примерно 3 марта была проведена проверка кода, которая действительно прерывает работу window.open с фоновой страницы, но была временно отменена. Так что ожидать, что это не будет работать, начиная с Chrome 50?

На самом деле возможно (в Chrome 43) запустить упакованное приложение платформы Chrome на вкладке браузера. Со своей фоновой страницы просто вызовите window.open с URL-адресом некоторого контента в вашем приложении. например, если index.html находится в каталоге вашего приложения, оно откроет ваше приложение на вкладке браузера с URL-адресом chrome-extension://{{ extension id }}/index.html

Это не должно требовать каких-либо дополнительных разрешений манифеста.

Обратите внимание, что это не сработает, если вы просто наберете URL-адрес chrome-extension://{{ extension id }}/index.html в своем браузере. Вам нужно открыть его из фонового скрипта приложения.

person kzahel    schedule 04.06.2015
comment
Это все еще в силе? chrome-extension://{{ asdfsdfsdfsdfsdfsdfsdfsdfsdfdsfsd }}/index.html Вот как выглядит идентификатор длиной около 30 символов. Так введите это так? Дословно без кавычек и слэшей? - person ejbytes; 21.08.2016