Qt编程:如何在webkit中扩展Javascript API

Mic*_*ine 2 javascript c++ qt webkit device

我是Qt的新手,我想做的是:

  1. 使用Qt框架创建Linux应用程序.
  2. 此应用程序显示来自Internet的一些网页.
  3. 我想扩展JavaScript API以访问一些基于设备和设备的数据,这意味着可以使用Webkit中的JavaScript控制某些设备.

但是如何在Qt中为Webkit添加一些自定义函数/类?

Raú*_*ràs 6

我已经完成了一个QWebKit项目,在该项目中我建立了Javascript和我的C++代码之间的桥梁.

为此,我使用了以下方法:

this->page()->mainFrame()->addToJavaScriptWindowObject( "god", this );
Run Code Online (Sandbox Code Playgroud)

这允许您使用指定为第一个参数的对象,将传递给addToJavaScriptWindowObject的对象的方法作为第二个参数从Javascript执行.

这是一个例子:

class Browser : public QWebView
{
     Q_OBJECT
     public:
         Browser( QWidget* parent=0 )
         {
            connect( this->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()),    this,   SLOT(onJavaScriptWindowObjectCleared()) );
         }

     public slots:
         void onJavaScriptWindowObjectCleared()
         {
          //   QString script = "console.log('init!');";
          //   this->page()->mainFrame()->evaluateJavaScript( script );
         }

         void onChange()
         {
             qDebug() << "Browser::onChange()";
         }
 }
Run Code Online (Sandbox Code Playgroud)

然后,从Javascript我可以做:

$('input:text').keydown( god.onChange );
Run Code Online (Sandbox Code Playgroud)

因此,每当我按下输入框中的某个键时,执行god.onChange(),执行Browser :: onChange()插槽.

这样就可以避免扩展JS api.


Rin*_*ing 6

幸运的是,最终存在一些文档,最后:http://doc.qt.io/qt-4.8/qtwebkit-bridge.html