Я сделал проект 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.