我正在尝试在Qt中实现网页的显示。我选择使用Qt WebEngine来完成我的任务。这就是我的所作所为:
在我的代码中,它看起来像这样:
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()
功能对网页没有影响。我可以在输出窗口中看到网页,但我预期的单选按钮不存在。我做错了什么?
答案 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
时,请等待事件或尝试在超时后稍后调用该函数。如果您需要获取代码执行的结果,则可能需要使用第二种超时方法,因为这只能同步进行。