Я ищу оксидную эквивалентность этой функции QtWebKit:
WebView.experimental.evaluateJavaScript()
Или WebKitGtk
WebView.execute_script()
У меня проблемы с поиском документации об оксиде. Эта статья содержит полезную информацию, но не совсем то, что я пытаюсь сделать: http://daker.me/2014/05/how-to-use-oxide-in-your-ubuntu-qml-application. HTML
Нет никакого встроенного эквивалента, но можно воспроизвести это поведение путем установки обработчика сообщений в пользовательском сценарии, который инициировал событие в DOM, который Вы обрабатываете в документе HTML. Для каждого из этих шагов проведен код, который будет выполняться. Для простого примера:
окись-test.qml
import QtQuick 2.0
import Ubuntu.Components 0.1
import com.canonical.Oxide 1.0
Rectangle {
width: units.gu(50)
height: units.gu(75)
// Both the UserScript and the call to sendMessage need to share the same
// context, which should be in the form of a URL. It doesn't seem to matter
// what it is, though.
property string usContext: "messaging://"
WebView {
id: webview
anchors {
top: parent.top
left: parent.left
right: parent.right
bottom: button.top
}
context: webcontext
url: Qt.resolvedUrl("oxide-test.html")
function executeJavascript(code) {
var req = rootFrame.sendMessage(usContext, "EXECUTE", {code: code});
}
}
WebContext {
id: webcontext
userScripts: [
UserScript {
context: usContext
url: Qt.resolvedUrl("oxide-user.js")
}
]
}
Button {
id: button
anchors {
bottom: parent.bottom
left: parent.left
right: parent.right
}
text: "Press Me"
onClicked: webview.executeJavascript("exampleFunc('Hello');")
}
}
окись-user.js
oxide.addMessageHandler("EXECUTE", function (msg) {
var event = new CustomEvent("ExecuteJavascript", {detail: msg.args.code});
document.dispatchEvent(event);
});
oxide-test.html
<html>
<head>
<script>
document.addEventListener("ExecuteJavascript", function (event) { eval(event.detail); });
function exampleFunc(message) {
document.body.innerHTML += "<p>" + message + "</p>";
}
</script>
</head>
<body>
</body>
</html>
(Отмечают, что, если все Вы пытаетесь сделать, управляет DOM, можно сделать так из пользовательского сценария.)
Этот код не позволяет Вам получать результат выполнения. Можно быть в состоянии передать обратный вызов в, но я подозреваю, что это не будет на самом деле работать. Вместо этого необходимо будет настроить параллельную цепочку обмена сообщениями для возвращения результата к контексту QML.