私は古いWindows VB6プロジェクトの一部を維持する必要があります(つまり、VB.NETに移行するよう教えてください)。このプログラムは、ローカルのHTMLファイルをロードする(異なる統計情報を含みますが、重要ではない)よく知られているWebブラウザコントロール(IE)を組み込みます。 Webブラウザビューでスクロールバーを必要としないことが分かっている(HTMLページがWebブラウザウィンドウよりも長い場合でも、上にあるものを確認するだけです)、DocumentCompleteイベントでDOMを次のように管理します。DOM操作の完了を待つ方法は?
Private Sub wb_DocumentComplete(ByVal pDisp As Object, URL As Variant)
wb.Document.documentElement.Style.overflow = "hidden"
ProcessWithDStats
End Sub
すべての音が正しく表示され、垂直スクロールバーが消えてしまいましたが、以前のDOM操作が完全に完了していることを確認する必要があるProcessWithDStatsサブ(多くの機能を呼び出す大きなサブ)にいくつかのものを追加する必要がありますmean:スクロールバーが隠されていて、コンテンツがこの新しい幅のスクロールバーに応じて再配置されます)。
だから、どうやって?
DOM管理が実際にレンダリングされる前に、ProcessWithDStatsが実行されます。今まで
は、ここに私の試みは、次のとおりです。
私は2つのライン間(DOC幅とブラウザのクライアント領域1を比較)スクロールバーのテストを追加しようとしましたが、それは動作しません。テストはOKですが、スクロールバーが消えたときのこの幅の変更のためにテキストのリフローは、ProcessWithDStatsが使用される前に適用されるのに十分な時間がありません。さて、このWebBrowserコントロール内の指定されたDOM管理の実際のアプリケーションを待つそこ方法です
(ウェブブラウザのレンダリングが含まれている)私は)(スリープしようとしましたが、それはプログラム全体をロックし
?
私のようなものを意味する:あなたは最低で...これを実行する必要が
Do
Doevents
Loop Until [DOM modification and rendering completed]
文書でフレームが使用されていますか?その場合、コントロールは複数のDocumentCompleteイベントを発生させる可能性があり、トップレベルのドキュメントであるかどうかを判断するためにpDispパラメータを調べる必要があります。 If(pDispがWebBrowser1.Objectの場合)... – jac
残念ながら、いいえ、Beaner:フレームやiframeがありません。しかし、私の質問以来、私は試したことがあり、うまくいくと思っていました(しかし、それほどスマートではありませんので、本当にスマートな解決策を待っています)。ちょうど2つの行の間に、私は何もしないが、前の "オーバーフロー隠し"のものと同期する利点を持っているダミーDOM操作を追加します: doc.parentWindow.scrollBy 0,1 doc.parentWindow。scrollBy 0、-1 したがって、ProcessWithDStatsに関わる時間が来ると、リフローが行われました。あれについてどう思う ?あなたはより良い方法を思いついていますか? – hilow
あなたはどんなことでも良い仕事をしているようです。 – jac