【问题标题】:Qt function runJavaScript() does not execute JavaScript codeQt 函数 runJavaScript() 不执行 JavaScript 代码
【发布时间】:2016-06-27 17:59:20
【问题描述】:

我正在尝试在 Qt 中实现网页的显示。我选择使用 Qt WebEngine 来完成我的任务。这就是我所做的:

  • 编写了一个包含空表单的示例网页。
  • 仅使用 API 编写了一个 JS 文件,以在表单内创建一个单选按钮。

在我的代码中,它看起来像这样:

View = new QWebEngineView(this);
// read the js file using qfile
file.open("path to jsFile");
myJsApi = file.Readall();
View->page()->runjavascript (myjsapi);
View->page()->runjavascript ("createRadioButton(\"button1\");");

我发现runJavaScript()函数对网页没有影响。我可以在输出窗口中看到网页,但我期望的单选按钮不存在。我做错了什么?

【问题讨论】:

    标签: javascript html qt qtwebengine


    【解决方案1】:

    我认为您必须将page() 的信号loadFinished(bool) 连接到一个插槽,然后在此插槽中执行runJavaScript()

    void yourClass::mainFunction()
    {
        View = new QWebEngineView(this);
    
        connect( View->page(), SIGNAL(loadFinished(bool)), this, SLOT(slotForRunJS(bool)));
    }
    
    void yourClass::slotForRunJS(bool ok)
    {
        // read the js file using qfile
        file.open("path to jsFile");
        myJsApi = file.Readall();
        View->page()->runJavaScript(myjsapi);
        View->page()->runJavaScript("createRadioButton(\"button1\");");
    }
    

    【讨论】:

    • 很高兴听到这个消息!如果它适合您,请随时接受答案,因为它也可以帮助其他人。
    【解决方案2】:

    我遇到了这个问题,runJavascript 没有任何效果。我必须将一些 html 内容放入视图中(在运行之前使用page().setHtml("")

    【讨论】:

      【解决方案3】:

      检查应用程序输出,它可能包含 JavaScript 错误。即使你的JS代码有效,你也可能会遇到脚本在DOMContentLoaded事件之前运行的情况,即document.readyState == 'loading'。因此,DOM 以及其他脚本提供的变量或函数可能还不可用。如果您依赖它们来运行您的代码,当您检测到此readyState 时,请等待事件或稍后在超时后尝试调用该函数。如果您需要获取代码执行的结果,则可能需要第二种超时方法,因为这只能同步完成。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多