有什么方法可以将Q ++对象/函数公开给在Qt中的QtWebKit浏览器中运行的JavaScript?可以将ActionScript对象公开给在Adobe AIR中的WebKit浏览器中运行的JS代码 - 我正在Qt中寻找类似的功能。
答案 0 :(得分:4)
编辑:链接工作,但仅仅是因为理查德摩尔的[Link]链接突然出现 ......
我见过一个关于#qt和qt-interest的问题是怎么回事 将自定义(特定于应用程序)API添加到默认情况下可用的API QtWebKit的。这实际上非常简单(一旦你知道如何),我将展示 下面。这篇文章将展示如何使对象可用的简单示例 来自javascript,包括调用对象上的方法和返回值 来自C ++。
为了执行此操作,您确实需要了解两件事 集成,首先是addToJavaScriptWindowObject()方法 QWebFrame,这允许使指定的QObject可见 JavaScript的。你需要知道的第二件事是发布的对象 每次清除javascript窗口对象时,这种方式都会消失 - 即。每次用户导航到新页面。为了防止这种情况造成 问题,QWebFrame提供了一个信号,告诉你什么时候对象 已清除,允许您重新添加自定义API。这实际上要简单得多 听起来不错!
这个核心实际上是在示例中的两个方法中实现的,它们是 如下所示:
void MyApi::setWebView( QWebView *view )
{
QWebPage *page = view->page();
frame = page->mainFrame();
attachObject();
connect( frame, SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(attachObject()) );
}
void MyApi::attachObject()
{
frame->addToJavaScriptWindowObject( QString("MyApi"), this );
}
此代码是您创建所有公共广告位所需的全部代码 MyApi对象对javascript可见。 MyApi类提供了两个公共插槽:
public slots:
void doSomething( const QString ¶m );
int doSums( int a, int b );
第一个插槽只是将消息记录到调试输出,第二个插槽返回 它的两个参数的总和(是的,插槽可以返回东西!)。他们被称为 来自这样的javascript:
MyApi.doSomething( 'Hello from JS page 2!!!!' );
sum = MyApi.doSums( 2, 3 );
alert( 'C++ says the sum is ' + sum );
这就是它的全部!您可以从> http://xmelegance.org/devel/qtwebkitextension.tar.gz下载代码。
答案 1 :(得分:2)
是。看看this.这应该是一个好的开始。