使用Javascript从Qt WebView获取文本

时间:2014-07-17 07:53:19

标签: javascript qt text webview qml

是否可以使用javascript或qml从QT中的WebView中加载页面中获取文本?我发现的所有答案都是Java或与QT不相似的。

1 个答案:

答案 0 :(得分:2)

在Qt5中,大多数WebView功能都成为未记录的(并且不受支持的)QtWebKit.experimental的一部分。我已经找到is this blog post这些功能的最全面的解释。

在继续之前,请注意:实验性功能可以 - 并且将来 - 在未来版本中发生变化。因此,在运行示例代码时,您将在控制台中看到警告。

这是一个将整个HTML发布到控制台的完整示例。将此更改为仅转储页面的一部分,将HTML发送到其他地方等等应该是相当简单的。

import QtQuick 2.2
import QtWebKit 3.0
import QtWebKit.experimental 1.0

Rectangle {
    width: 800
    height: 600

    WebView {
        url: "http://stackoverflow.com/"
        anchors.fill: parent

        // Enable communication between QML and WebKit
        experimental.preferences.navigatorQtObjectEnabled: true;

        // When the document loads, post the outerHTML back to the QML layer.
        onLoadingChanged: {
            if (loadRequest.status === WebView.LoadSucceededStatus) {
                experimental.evaluateJavaScript(
                    "navigator.qt.postMessage(document.documentElement.outerHTML)");
            }
        }

        // When we get the message, dump the string data to the console.
        experimental.onMessageReceived: {
            console.log(message.data);
        }
    }
}

总结一下,这是代码的作用:

  • 将Stack Overflow的主页加载到WebView实例
  • 当页面完全加载时,它要求WebView评估读取文档的outerHTML属性的Javascript并将其作为消息发布回QML
  • 收到邮件后,会将该HTML转储到控制台