Pau*_*xon 6 javascript qt webkit qtwebkit
我已经使用addToJavaScriptWindowObject成功地将C++对象添加到QWebFrame,并且可以从javascript调用该对象上的插槽.
但我真正想做的是让其中一个插槽返回一个新对象.例如,我有一个这样的插槽,它返回一个QObject派生类实例:
MyObject* MyApp::helloWorld()
{
//MyObject is dervied from QObject
return new MyObject();
}
Run Code Online (Sandbox Code Playgroud)
我可以像这样从javascript成功调用这个插槽
var foo=myapp.helloWorld();
Run Code Online (Sandbox Code Playgroud)
但是foo似乎是空的,我不能通过Javascript调用任何插槽或访问它的任何属性.
有关如何实现这一目标的任何想法?
我考虑过的一个相当丑陋的黑客方法是使用 addToJavaScriptWindowObject 将我想要返回的对象放入具有随机名称的窗口对象中,然后让我的插槽返回对象实例的名称:
QString MyApp::helloWorld()
{
//general a unique name for the js variable
QString name=getRandomVariableName();
//here's the object we want to expose to js
MyObject* pReturn=new MyObject();
//we make attach our object to the js window object
getWebFrame()->addToJavaScriptWindowObject(name, pReturn,
QScriptEngine::ScriptOwnership);
//tell js the name we used
return name;
}
Run Code Online (Sandbox Code Playgroud)
可以编写JS来检查返回值是否是字符串,如果是,则从窗口中抓取对象:
var foo=myapp.helloWorld();
if (typeof foo == "string")
{
foo=window[foo];
}
Run Code Online (Sandbox Code Playgroud)
有点难看,但在更好的方法出现之前我会坚持下去。未来的 Qt 版本将统一脚本支持,以便它全部基于 WebKit 中的 JavaScriptCore,所以希望这会有所改进!
| 归档时间: |
|
| 查看次数: |
7068 次 |
| 最近记录: |