编辑:链接正在工作,但以防万一链接再次中断[Link]理查德·摩尔
...
我在 #qt 和 qt-interest 上看到多次出现的一个问题是如何
将自定义(特定于应用程序的)API 添加到默认可用的 API
QtWebKit。正如我将展示的,这实际上非常简单(一旦您知道如何做)
以下。这篇文章将展示一个如何使对象可用的简单示例
来自 javascript,包括调用对象的方法和返回值
来自 C++。
为了执行此操作,您确实需要了解两件事
集成,首先是addToJavaScriptWindowObject()方法
QWebFrame,这允许使指定的 QObject 可见
JavaScript。您需要知道的第二件事是发布的对象
每次清除 javascript 窗口对象时,这种方式都会消失 -
IE。每次用户导航到新页面时。为了防止这种情况造成
出现问题时,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.