При использовании инструментов разработчика Chrome кажется, что каждое окно приложения (и фоновая «страница») имеет свой собственный контекст javascript (пространство объектов, поток выполнения), и все же обратный вызов createdWindow для chrome.app.window.create, по-видимому, обеспечивает прямой доступ к объектам только что созданного «другого» окна.
Учитывая это, я не знаю, как лучше всего общаться между окнами; например если я открываю второе окно, которое действует как диалоговое окно, когда пользователь нажимает кнопку «ОК» для сохранения изменений, следует ли мне использовать postMessage, sendMessage или просто вызывать функцию для объекта в главном окне. Я просмотрел образцы обмена сообщениями, и, похоже, они сосредоточены на взаимодействии между двумя разными приложениями или между приложением и расширением.
Итак, я ищу четкое описание памяти и модели выполнения в одном приложении. Действительно ли существуют отдельные контексты или это всего лишь одно пространство объектов с одним потоком выполнения? Как лучше всего взаимодействовать между окнами одного и того же приложения Chrome?
2 ответа
Это отличный вопрос, Джеймс!
Несколько хромированных окон не полностью разделены. Они разделяют один поток и пространство объектов, однако объект окна у каждого свой. В javascript ссылки на объекты с незаданной областью ищутся в текущем окне, поэтому окна выглядят как разные объектные пространства, но на самом деле это не так.
Таким образом, вы можете войти в другое окно и выполнить там функцию или манипулировать состоянием другими способами (например, установить переменную в другом окне на функцию из текущего окна), и это приемлемо и поддерживается.
Вы можете найти chrome.app.window.getAll () и < полезные методы href = "http://developer.chrome.com/apps/app_window.html#method-get" rel = "nofollow"> chrome.app.window.get () . Однако они являются новыми для Chrome 33, который еще не находится в стабильном канале.
В качестве альтернативы вы можете хранить массив открытых объектов AppWindow
в контексте фоновой страницы.
Затем вы можете получить ссылку на контекст фоновой страницы из любого окна, используя chrome.runtime .getBackgroundPage () метод
Похожие вопросы
Связанные вопросы
Новые вопросы
google-chrome-app
Не используйте этот тег для PWA или самого приложения / двоичного файла Chrome! Используйте этот тег только для приложений, созданных с использованием спецификации приложения Chrome. Как и веб-приложения, приложения Chrome написаны на HTML5, JavaScript и CSS, но выглядят и ведут себя как нативные приложения, и у них есть нативные возможности, которые намного мощнее, чем у веб-приложений.