私は答えを見つけました。Qt5.5では基本的にQtWebViewで実験の地に飛び込んでいます。クラス メソッドの大部分は文書化されておらず、将来変更される可能性があります。
今のところ、唯一の手法はメッセージ パッシングであり、 QWebView C++ Bridgeで使用できるようなネイティブ C++ クラス メソッドの呼び出しではありません。QWebView C++ Bridge は、QtWebView QML ではなく、QWebView ウィジェットでのみ動作します。したがって、このメッセージをnavigator.qt.postMessage()
Javascript から QML に API で渡すと、QML は C++ を呼び出すことができます。その追加機能を取得するには、いくつかの手順を実行する必要があります。次に例を示します。
webviews Javascript から C++ メソッドを呼び出す
これはここに少しブログされています:
http://rschroll.github.io/beru/2013/08/21/qtwebview.experimental.html
例からわかるように、これらのインポートを main.qml に追加する必要があります。
import QtWebKit 3.0
import QtWebKit.experimental 1.0
次に、WebView{}
セクションに次の行を追加する必要があります。
experimental.preferences.navigatorQtObjectEnabled: true
その時点でnavigator.qt.postMessage("call foo in C++");
、QML にメッセージを送信するために呼び出すことができます。これは、WebView{}
セクション内で次のように取得できます。
experimental.onMessageReceived: { ...do something here in the QML... }
QML は、次のようにメッセージを Javascript に直接渡すことができます。
experimental.postMessage("okay, I called foo in C++")
次に、Javascript で次のようにイベント リスナーを追加できます。
navigator.qt.onmessage = function(ev) {
$('BODY').prepend(ev.data); // since console.log() is not possible
}
QML で C++ を呼び出す方法については、次の例を参照してください。
https://stackoverflow.com/a/17881019/105539
編集: Qt 5.5 で QtWebView を使用してさらに実験を行った後、次の点でかなり不安定に見えます。5.5 での使用はお勧めしません。Qt 5.5 では、今のところ QWebView ウィジェットを使用し、Qt の次のバージョン (Qt 5.6、5.7?) が出たらQtWebEngineに移行することをお勧めします。
デフォルトでは、必要のない右クリック コンテキスト メニューが表示されます。興味深いことに、実験的なライブラリをインポートして QML でこのプロパティを設定すると、これをオフにすることができます: experimental.preferences.navigatorQtObjectEnabled: true
.
デフォルトでは、HTML5 postMessage() API (HTML5 のネイティブ API) は、有効にしない限り機能しないようexperimental.preferences.navigatorQtObjectEnabled: true
です。
を有効experimental.preferences.navigatorQtObjectEnabled: true
にすると、一部の HTML ページ要素でスクロールバーを有効にした場合にスクロールバーが消え、チェックボックスとラジオ ボタンが非常に奇妙に見え、ポップダウン選択リストボックスが機能しなくなりました。
ページをダブルクリックすると、ページがズームされます。