以下是一个简单的 QML、WebKit 和 JavaScript 交互的例子:
main.qml 文件:
```
import QtQuick 2.0
import QtWebKit 3.0
Item {
width: 800
height: 600
WebKit {
id: webview
anchors.fill: parent
url: "http://www.example.com"
onLoadingChanged: {
if (loadRequest.status === WebKit.LoadSucceeded) {
// 在页面加载完成后,向页面注入 JavaScript 代码
webview.injectJavaScript("function sayHello() { alert('Hello, world!'); }");
}
}
onMessageReceived: {
// 接收来自页面的消息,并在控制台中输出
console.log("Received message from page:", message);
}
}
Button {
text: "Call JavaScript function"
onClicked: {
// 调用页面中的 JavaScript 函数
webview.evaluateJavaScript("sayHello();");
}
}
}
```
在这个例子中,我们创建了一个 WebKit 组件,并在页面加载完成后向页面注入了一个名为 `sayHello` 的 JavaScript 函数。当用户点击按钮时,我们调用了该函数。
同时,我们还监听了来自页面的消息,并在控制台中输出。如果页面需要向应用程序发送消息,可以使用 `window.webkit.messageHandlers..postMessage()` 方法发送消息,其中 `` 是应用程序中注册的消息处理器名称,`` 是要发送的消息内容。
在应用程序中,我们需要注册一个消息处理器,以便接收来自页面的消息。例如:
```
QWebChannel *channel = new QWebChannel(this);
channel->registerObject("myObject", this);
webview->page()->setWebChannel(channel);
```
在这个例子中,我们将应用程序中的 `this` 对象注册为名为 `myObject` 的消息处理器。当页面调用 `window.webkit.messageHandlers.myObject.postMessage()` 方法发送消息时,应用程序会自动调用 `myObject` 对象中的 `qtMessageReceived(const QJsonObject &message)`