QT Программирование: Как расширить JavaScript API в WebKit
-
27-09-2019 - |
Вопрос
Я новичок в Qt и что я пытаюсь сделать:
- Создайте приложение Linux, используя Framework QT.
- Это приложение отображает некоторые веб-страницы из Интернета.
- Я хочу расширить JavaScript API для доступа к некоторым данным устройств и на основе устройств, что означает, что некоторые устройства могут контролироваться с помощью JavaScript в WebKit.
Но как добавить некоторые настроенные функции / классы в WebKit в Qt?
Решение
К счастью, существует некоторая документация на этом, наконец: http://doc.qt.io/qt-4.8/qtwebkit-bridge.html.
Другие советы
Я сделал проект QWebkit, в котором я поставил мост между JavaScript и My C ++.
Для достижения этого я использовал метод:
this->page()->mainFrame()->addToJavaScriptWindowObject( "god", this );
Это позволяет выполнять методы пропускаемых вами объекта для AddJavascriptWindowObject в качестве второго параметра от 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 );
Поэтому каждый раз, когда я нажимаю клавишу в поле ввода, выполняется Bod.onchange (), который выполняет браузер :: oonChange () слот.
Таким образом, вы избегаете расширения API JS.