Qt函数runJavaScript()不执行JavaScript代码

时间:2016-06-27 17:59:21

标签: javascript html qt qtwebengine

我正在尝试在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()功能对网页没有影响。我可以在输出窗口中看到网页,但我预期的单选按钮不存在。我做错了什么?

3 个答案:

答案 0 :(得分:4)

我认为您必须将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\");");
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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