QTプログラミング:WebKitでJavaScriptAPIを拡張する方法
-
27-09-2019 - |
質問
私はQTに慣れていますが、私がやろうとしていることは次のとおりです。
- QTフレームワークを使用してLinuxアプリを作成します。
- このアプリは、インターネットからいくつかのWebページを表示します。
- JavaScript APIを拡張して、いくつかのデバイスベースのデータとデバイスベースのデータにアクセスしたいと考えています。つまり、WebKitでJavaScriptを使用して一部のデバイスを制御できます。
しかし、QTのWebKitにカスタマイズされた関数/クラスを追加するにはどうすればよいですか?
解決
幸いなことに、これに関するいくつかのドキュメントが存在します、最終的に: http://doc.qt.io/qt-4.8/qtwebkit-bridge.html
他のヒント
JavaScriptとC ++コードの間のブリッジを安定させたQWEBKITプロジェクトを作成しました。
これを達成するために、私は方法を使用しました:
this->page()->mainFrame()->addToJavaScriptWindowObject( "god", this );
これにより、最初のパラメーターとして指定されたオブジェクトを使用して、JavaScriptの2番目のパラメーターとしてaddtojavascriptwindowobjectを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()";
}
}
それから、JavaScriptから私ができる:
$('input:text').keydown( god.onChange );
そのため、入力ボックスにキーを押すたびに、god.onchange()が実行され、ブラウザ:: onchange()スロットが実行されます。
これにより、JS APIの拡張を避けます。
所属していません StackOverflow