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

Qt编程:如何在webkit中扩展Javascript API,javascript,c++,qt,webkit,device,Javascript,C++,Qt,Webkit,Device,我是Qt的新手,我正在尝试做的是: 使用Qt框架创建Linux应用程序 此应用程序显示来自Internet的一些网页 我想扩展JavaScript API以访问一些设备和基于设备的数据,这意味着可以使用Webkit中的JavaScript控制一些设备 但是如何在Qt? < p>中添加一些定制函数/类到WebKIT中。我做了一个QWebKIT项目,在其中我架起了JavaScript和C++代码之间的桥梁。 为此,我使用了以下方法: this->page()->mainFrame()-&

我是Qt的新手,我正在尝试做的是:

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

  • <>但是如何在Qt?

    < p>中添加一些定制函数/类到WebKIT中。我做了一个QWebKIT项目,在其中我架起了JavaScript和C++代码之间的桥梁。 为此,我使用了以下方法:

    this->page()->mainFrame()->addToJavaScriptWindowObject( "god", this );
    
    这允许您使用指定为第一个参数的对象,执行作为Javascript的第二个参数传递给addToJavaScriptWindowObject的对象的方法

    这里有一个例子:

    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()";
             }
     }
    
    所以每次我在输入框中按下一个键,就会执行god.onChange(),它执行Browser::onChange()slot


    这样可以避免扩展JS api。

    幸运的是,有一些关于这方面的文档,最后:

    这里有一大堆Qt脚本示例:。这是我们正在跟踪的工作。如果你想尝试这个实验性的特性,请在或this中签出答案。但是,Qt脚本能够处理html+css+javascript吗?我想用我定制的javascript API显示整个网页。您过去的一些问题表明您正在使用设备、基于web的更新和地图。这是我的公司(TomTom)拥有多项专利的领域。选择解决方案后,您可能希望与IP律师核实此类解决方案是否侵犯版权。@MSalters提醒我永远不要购买TomTom设备。谢谢,对我帮助很大
    $('input:text').keydown( god.onChange );