qt 中调用 JavaScript的 方法 出问题 ,调用window 对象的方法没问题 但是 调用自己写 的方法就错误 求教

JavaScript011

qt 中调用 JavaScript的 方法 出问题 ,调用window 对象的方法没问题 但是 调用自己写 的方法就错误 求教,第1张

evaluateJavaScript执行的是QWebView容器内部的JS环境中得到方法,也就是说,say()这个方法你要在JS环境中能够访问.有两种方式可以实现say()函数,一种是用js代码写,然后在QWebView中调用,比如写到<script>标签内不着单独的js文件并在html中引用第二种是用Qt语言写,并将该函数声明注册给QWebView的引擎环境,方法是addToJavaScriptWindowObject.

不清楚你的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>