Программирование на Qt: Как расширить Javascript API в webkit - PullRequest
2 голосов
/ 24 ноября 2010

Я новичок в Qt, и я пытаюсь сделать следующее:

  1. Создать приложение Linux с использованием инфраструктуры Qt.
  2. Это приложение отображает некоторые веб-страницы из Интернета.
  3. Я хочу расширить API JavaScript для доступа к некоторым данным устройства и устройства, что означает, что некоторыми устройствами можно управлять с помощью JavaScript в Webkit.

Но как добавить некоторыенастраиваемые функции / классы для Webkit в Qt?

Ответы [ 2 ]

6 голосов
/ 25 ноября 2010

К счастью, существует некоторая документация по этому вопросу, наконец: http://doc.qt.io/qt-4.8/qtwebkit-bridge.html

6 голосов
/ 25 ноября 2010

Я сделал проект QWebKit, в котором я установил мост между Javascript и моим кодом C ++.

Для этого я использовал метод:

this->page()->mainFrame()->addToJavaScriptWindowObject( "god", this );

Это позволяет вам выполнять методы объекта, который вы передаете 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()";
         }
 }

Тогда из Javascript я могу сделать:

$('input:text').keydown( god.onChange );

Таким образом, каждый раз, когда я нажимаю клавишу в поле ввода, выполняется god.onChange (), который выполняет слот Browser :: onChange ().

Таким образом, вы избегаете расширения API JS.

...