QML-тип WebEngine
Предоставляет доступ к контексту веб-движка. Подробнее…
Строка импорта: | import Sailfish.WebEngine 1.0 |
Свойства
- initialized : bool
Сигналы
- contextDestroyed()
- recvObserve(message, data)
Методы
- addComponentManifest(manifestPath)
- addObserver(aTopic)
- notifyObservers(topic, value)
- removeObserver(aTopic)
Подробное описание
Компонент WebEngine
— это синглтон, который обеспечивает доступ к контексту веб-движка.
QML-тип WebEngine
предоставляется через импорт QML-модуля Sailfish.WebEngine
.
Пример использования:
import QtQuick 2.0
import Sailfish.Silica 1.0
import Sailfish.WebView 1.0
import Sailfish.WebEngine 1.0
ApplicationWindow {
id: root
initialPage: Component {
WebViewPage {
WebView {
anchors.fill: parent
url: "https://auroraos.ru/"
}
Component.onCompleted: {
WebEngine.addObserver("clipboard:setdata")
WebEngine.onRecvObserve.connect(function(message, data) {
if (message == "clipboard:setdata" && !data.private) {
console.log("Clipboard contents: " + data.data);
}
})
}
}
}
}
См. также WebView.
Описание свойств
[read-only] initialized : bool
Возвращает true
, если компонент был инициализирован, иначе false
.
Описание сигналов
contextDestroyed()
Сигнал испускается после того, как внедрение было остановлено, и контекст готов к удалению.
Сигнал испускается, когда встраивание было остановлено, непосредственно перед удалением
WebEngine
и выходом из программы.
recvObserve(message, data)
Сигнал испускается, когда получено уведомление по наблюдаемой теме.
После того, как приложение зарегистрировало интерес к определённой теме, вызвав addObserver, оно может затем подключиться к данному сигналу, чтобы получать уведомления о любом компоненте, отправляющем уведомление по теме.
Параметр message будет соответствующей темой, параметр data будет содержать данные, отправленные адресантом в формате JSON. Точная структура JSON остаётся на усмотрение адресанта.
См. также addObserver и notifyObservers.
Описание методов
addComponentManifest(manifestPath)
Регистрирует компоненты JavaScript Chrome для загрузки в
WebEngine
.
WebEngine
имеет три основных слоя.
Верхний слой представлен в виде QML-компонентов с интерфейсом для разработчиков. Нижний слой —
нативный движок рендеринга Gecko.
Между ними находится слой JavaScript Chrome, который может взаимодействовать с любым из двух других, используя шаблон наблюдателя/уведомления. Эти компоненты JavaScript считаются привилегированным кодом и запускаются с помощью системного принципала.
Вызов данного метода позволяет добавлять и выполнять новые компоненты JavaScript как часть промежуточного слоя.
manifestPath должен быть абсолютным путём, указывающим на файл манифеста. Файл манифеста должен
содержать ссылки на компоненты в том же каталоге, как показано в следующем примере. Пример состоит
из трёх файлов: файла пользовательского интерфейса QML, который вызывает addComponentManifest
,
файла манифеста и компонента, на который есть ссылка в манифесте.
Файл WebEngine page.qml вызывает
addComponentManifest
.
import QtQuick 2.1
import Sailfish.Silica 1.0
import Sailfish.Browser 1.0
import Sailfish.WebEngine 1.0
ApplicationWindow {
id: root
initialPage: Component {
WebViewPage {
WebView {
anchors.fill: parent
url: "https://auroraos.ru/"
onLinkClicked: {
WebEngine.notifyObservers("exampleTopic", url)
}
}
Component.onCompleted: {
WebEngine.addComponentManifest("/path/file.manifest")
}
}
}
}
Файл манифеста по пути /path/file.manifest
component {20227a22-1722-4753-b8f6-c842b401b4c3} ExampleComponent.js
contract @mozilla.org/embedlite-example-component;1 {20227a22-1722-4753-b8f6-c842b401b4c3}
category app-startup ExampleComponent service,@mozilla.org/embedlite-example-component;1
Компонент JavaScript Chrome указывается в манифесте и хранится по пути /path/ExampleComponent.js
const Ci = Components.interfaces;
const Cu = Components.utils;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
XPCOMUtils.defineLazyServiceGetter(Services, "embedlite",
"@mozilla.org/embedlite-app-service;1",
"nsIEmbedAppService");
Services.scriptloader.loadSubScript("chrome://embedlite/content/Logger.js");
function ExampleComponent() {
Logger.debug("JSComp: ExampleComponent.js loaded");
}
ExampleComponent.prototype = {
classID: Components.ID("{20227a22-1722-4753-b8f6-c842b401b4c3}"),
QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver]),
observe: function(aSubject, aTopic, aData) {
switch (aTopic) {
case "app-startup":
Services.obs.addObserver(this, "exampleTopic", false);
break;
case "exampleTopic":
Logger.debug("ExampleComponent: exapleTopic data: " + aData);
break;
}
},
};
this.NSGetFactory = XPCOMUtils.generateNSGetFactory([ExampleComponent]);
addObserver(aTopic)
Регистрирует WebEngine
для получения
уведомлений по теме.
Движок Gecko и компоненты EmbedLite используют уведомления для передачи данных и информации о
событиях другим компонентам. Метод addObserver
позволяет
WebEngine
зарегистрироваться как
интересующемуся конкретной aTopic, чтобы он начал получать уведомления.
Когда WebEngine
получает уведомление о
зарегистрированной aTopic, он отправляет сигнал recvObserve
.
Документация Mozilla nsIObserver предоставляет подробную информацию о базовых процессах.
Существует также неполный список тем для уведомлений наблюдателей, на которые можно подписаться.
См. также removeObserver, recvObserve и notifyObservers.
notifyObservers(topic, value)
Отправляет широковещательное уведомление, которое могут получить другие компоненты.
Отправляет уведомление, которое будет получено любым компонентом, зарегистрировавшим наблюдателя для topic.
Дополнительные данные можно отправить вместе с уведомлением, используя параметр value в формате JSON.
См. также addObserver и recvObserve.
removeObserver(aTopic)
Отменяет регистрацию WebEngine
для
получения уведомлений по теме.
Если компонент, который ранее зарегистрировал интерес к получению уведомлений о aTopic, вызвав
addObserver, больше
не заинтересован в их получении, он может вызвать removeObserver
для отмены.
Вызов removeObserver
не гарантирует, что больше не будут получены уведомления по этой теме,
поскольку другие компоненты могли зарегистрировать интерес с помощью WebEngine
. WebEngine
перестанет посылать сигналы по теме только после отмены всех подписок.
См. также addObserver, recvObserve и notifyObservers.