現在、オンライン ゲームのアクティビティを「ログ」するアプリケーションに TWebBrowser を埋め込んで、そのゲームに関する統計をユーザーに表示できるようにしています。これは現在問題なく動作しますが、TWebBrowser は TChromium よりも少し遅いようです。したがって、 https ://bitbucket.org/chromiumembedded/ から Delphi TChromium 組み込みフレームワーク (CEF)-3 を使用するようにプロジェクトを変換し始めました。
これから、ダウンロードの demos ディレクトリにある guiclient を取得しました。
ここまでは順調ですが、「crmBrowserLoadEnd」の呼び出しを受信する前に、ユーザーがボタンを押して現在のページから移動できるようです。これにより、プログラムでデータが失われます。
別の方法として、どのリソースが個々のダウンロードを完了したかを確認することもできると思います。イベント「crmBrowserBeforeResourceLoad」をフックして、どのリソースがロードを「開始」するかを確認できます。しかし、リソースの読み込みが完了したことを知らせるイベントはないようです。
procedure TFrmDBrowser.crmBrowserBeforeResourceLoad(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; out Result: Boolean);
var
u: TUrlParts;
Item: TListItem;
begin
item := LvDataView.Items.Add();
item.Caption := request.Url;
end;
したがって、次のようになります。
- Q: ダウンロードされた個々のリソースのイベントを提供するよう CEF に依頼/通知するにはどうすればよいですか。これにより、ダウンロードされたときに index.htm を読み取ることができます。(ページ全体とすべてのリソースの読み込みが完了するのを待つ代わりに)
- A: 「crmBrowserLoadEnd」の代わりに「crmBrowserLoadStart」を使用します。ブラウザがダウンロードしたファイルを処理する前に URL を取得できるようにします。
- Q: ドキュメント全体の読み込みが完了し、crmBrowserLoadEnd が完了するまで、すべてのユーザー入力をブロックするにはどうすればよいですか? (ただし、これはユーザーのブラウザの楽しみを減らすため、あまり好ましくありません):
- A: 更新: 「crmBrowserPreKeyEvent」をキャッチし、「if FLoading then Result := True;」を追加します。ユーザーがキーボードを使用してナビゲートできないようにします。crmBrowser.Enabled の設定:= False。ユーザーがマウスを使用してナビゲートできないようにします。