Вопрос

Есть ли способ выставить объект / функцию C ++ для JavaScript, бегущего внутри браузера QTwebkit в Qt? Возможно выставить объекты ActionScript в код JS, запущенный внутри браузера WebKit в Adobe Air - я ищу аналогичную функциональность в Qt.

Это было полезно?

Решение

да. Взгляни на это. Это должно быть хорошим началом.

Другие советы

Редактировать: ссылка работает, но на случай, если ссылка снова разбивается Связь Ричард Мур ...

Один вопрос, который я видел, поднимается несколько раз на #qt и Qt-проценты, так как добавить пользовательские (конкретные приложения) API для доступных по умолчанию в Qtwebkit. Это на самом деле довольно легко (как только вы узнаете, как я покажу ниже. Этот пост покажет простой пример того, как сделать объект, доступный от JavaScript, включая методы вызова на объект и возвращающих значениях от C ++.

Существует две вещи, которые вам действительно нужно знать, чтобы выполнить эту интеграцию, первый - это метод AddtojavascriptWindowObject () qwebframe, это позволяет сделать указанный Qobject Visible из JavaScript. Второе, что вам нужно знать, это то, что объекты, опубликованные таким образом, будут исчезнуть каждый раз, когда окно JavaScript Object очищено - то есть. Каждый раз, когда пользователь навигается на новой странице. Чтобы предотвратить это возникновение проблем, 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 &param );
    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..

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top