5

を使用して Webviews を起動する Qt アプリケーションがありますQWebChannel

これらのビューでは、画面サイズに応じてウィンドウを配置/サイズ変更するために、JavaScript で何らかの処理を行っています。screenオブジェクトは、この種の情報を提供することになっています。(画面ドキュメント)

しかし、私のQWebEnginePage場合、読み込みプロセス全体で画面オブジェクトは空です。

screen.heightページのどこかにアクセスするためにボタンにリスナーを配置すると、機能するようになりました。

//js local file called in html head

//screen = {}
document.addEventListener("load", function(event) {
  //screen = {}
  new QWebChannel(qt.webChannelTransport, function(channel) {
    //screen = {}
    //stuff
    channel.object.myClass.show(function(res){ //Qt function that calls the show() method of the QWebEngineView
      //screen = {}
    });

  });

  document.getElementById("myBtn").addEventListener("click", function(){
    console.log("height:" + screen.height); // screen: 1440
  });
});

私の質問は、screenJavaScript のある時点で値にアクセスするにはどうすればよいですか?

4

1 に答える 1

2

screenオブジェクトにアクセスしようとしている時点では、アクセスできないと思います。実際、HTML ファイルは直接読み込まれますが、JavaScript オブジェクト/プログラムやスタイル シート (CSS ファイルなど) などの他のオブジェクトは非同期で読み込まれます。

QWebEnginePageのドキュメントで説明されています:

html はすぐにロードされます。外部オブジェクトは非同期にロードされます。

したがって、ページが読み込まれていない間は、このプロパティにアクセスできません。ただし、ボタンのリスナーで実際に行っているように、ページが読み込まれるとアクセスできます。これらのプロパティを取得する別の方法Q_INVOKABLEは、C++ 側で取得するためにクラスでメソッドを定義することです (この回答を参照してください)。

于 2016-04-20T14:06:22.303 に答える