不清楚你的say()是用哪种方式实现的,如果是第一种,你可以直接用单独的浏览器,比如chrome,下用web develop工具调用测试,判断是不是函数语法或解析问题
如果是第二种,看下是否已经正确的注册给对应的运行环境.
在界面上拖入QAxWidget,注意这里不建议直接在UI设计界面指定控件,否则可能引起QtCreator崩溃建议在代码中动态设置,如:
[cpp] view plain copy
ui->axWidget->setControl("Shell.Explorer")
ui->axWidget->dynamicCall("Navigate(QString)", "C:/1.html")
当然,上面的"C:/1.html"是我测试的页面
这里的办法是通过IHTMLWindow2接口的execScript方法执行JavaScript函数。可惜的是这个方法不支持函数返回值
[cpp] view plain copy
#include <MsHTML.h>
{
QAxObject *document = ui->axWidget->querySubObject("Document")
IHTMLDocument2 *doc2
document->queryInterface(QUuid(IID_IHTMLDocument2), (void**)&doc2)
if (doc2)
{
IHTMLWindow2 *win2 = nullptr
if (doc2->get_parentWindow(&win2) == S_OK)
{
BSTR s1 = SysAllocString(L"Test()")
BSTR s2 = SysAllocString(L"JavaScript")
VARIANT ret
win2->execScript(s1, s2, &ret)
SysFreeString(s2)
SysFreeString(s1)
}
}
}
JavaScript函数如下
[html] view plain copy
<script language="javascript" type="text/javascript">
function Test()
{
alert("你调用了全局函数Test")
}
</script>