2

現在、読み込まれた時点でRes://imagenameを介して読み込まれている画像を表示しようとしています。resハンドラーを備えたChromiumでは、ResourceResponseイベントを介してこれを行うことができましたが、TWebBrowserには、私が知る限り、同様の機能はありません。

私はOnDocumentComplete関数を利用することができ、作成されたHTMLドキュメント全体を調べる非常に非効率的な方法を実装することができました...

procedure TNotesBrowser.TBrowserDocumentComplete(ASender: TObject; const pDisp:   IDispatch; var URL: OleVariant);
var
    HTMLDocument2: IHTMLDocument2;
    i            : Integer;
    Item         : IHTMLElement;
    ImageUrl     : string;
begin
    HTMLDocument2 := ((FBrowser as TWebBrowser).Document AS IHTMLDocument2);
    if HTMLDocument2 <> nil then
    begin
        for i := 0 to HTMLDocument2.images.length -1 do
        begin
        Item := HTMLDocument2.images.item(i, 'null') As IHTMLElement;
        ImageUrl:=item.getAttribute('src',0);

        if ContainsText(ImageURL,'ImageName') then
            if Assigned(FCCICONLoaded) then
                { Trigger Event }
                FCCICONLoaded(self);
        end;
    end;
end;

ただし、これは非常に長いプロセスです。では、他の誰かが、ドキュメントを調べないようにするためにChromiumのOnResourceResponse()と同様に機能するイベントを見つけましたか?

4

1 に答える 1

1

いくつかの多大な調査を通じて、非同期のプラグ可能なプロトコルを使用してこの問題の解決策を見つけましたが、これまでのところ、フォームに直接埋め込まれたTWebBrowserを備えた単一のフォームアプリケーションでのみ機能します。このソリューションのソースコードは、http://www.jasontpenny.com/blog/2010/03/23/custom-protocol-handler-in-delphi/にあります。

私のように、TWebbrowserがフォームに直接埋め込まれていないために非同期プラガブルプロトコルの使用に問題がある場合は、新しい質問を開きました: TWebBrowser非同期プラガブルプロトコルのComServerを見つけるにはどうすればよいですか?

于 2012-10-24T14:53:40.543 に答える