Qt函数运行JavaScript()不执行JavaScript代码
Qt function runJavaScript() does not execute JavaScript code
我正在尝试在 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()
功能对网页没有影响。我可以在输出 window 中看到网页,但我期望的单选按钮不存在。我做错了什么?
我认为你必须将你的 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\");");
}
我遇到了这个问题,runJavascript
没有任何效果。我不得不将一些 html 内容放入视图中(在 运行 之前使用 page().setHtml("")
。
检查应用程序输出,它可能包含 JavaScript 错误。即使你的 JS 代码是有效的,你也可能会遇到脚本在 DOMContentLoaded
事件之前 运行 的情况,即 document.readyState == 'loading'
。因此,DOM 可能还不可用,其他脚本提供的变量或函数也是如此。如果您的代码依赖于它们 运行,当您检测到此 readyState
时,要么等待该事件,要么稍后尝试在超时后调用该函数。如果您需要获取代码执行的结果,则可能需要使用超时的第二种方法,因为这只能同步完成。
我正在尝试在 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()
功能对网页没有影响。我可以在输出 window 中看到网页,但我期望的单选按钮不存在。我做错了什么?
我认为你必须将你的 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\");");
}
我遇到了这个问题,runJavascript
没有任何效果。我不得不将一些 html 内容放入视图中(在 运行 之前使用 page().setHtml("")
。
检查应用程序输出,它可能包含 JavaScript 错误。即使你的 JS 代码是有效的,你也可能会遇到脚本在 DOMContentLoaded
事件之前 运行 的情况,即 document.readyState == 'loading'
。因此,DOM 可能还不可用,其他脚本提供的变量或函数也是如此。如果您的代码依赖于它们 运行,当您检测到此 readyState
时,要么等待该事件,要么稍后尝试在超时后调用该函数。如果您需要获取代码执行的结果,则可能需要使用超时的第二种方法,因为这只能同步完成。