Delphi アプリで Web サイトにログインし、ページに移動し、特定のファイルを自動的にダウンロードする方法については、埋め込みブラウザでダウンロードしたファイルを保存する場所を確認しないようにするにはどうすればよいですか?の解決策を参照してください。、ファイルのダウンロードに大いに役立ちました。
最後の問題は、ポップアップ ウィンドウで開く操作の最後のステップです。TWebBrowser.NewWindow2 を実装してポップアップ ウィンドウをキャプチャするソリューションはたくさんありますが、これらのイベントはどれも上記のコードでは機能しないようです。上記のコードの .invokeevent はおそらく動作しますか?
関数を呼び出すために、invokeveent と 273(newwindow3) の dispID を使用すると、2 番目の Web ブラウザーを popupwindow の URL に twebbwowser.navigate() できます。
私の問題は、ポップアップウィンドウに基本的に1行のjavascript「document.print(parent.parent.opener.thefunction())」があることです。2番目のtwebbrowserには親への参照がないため、これは失敗します。
TWebBrowser.NewWindow2 または 3 をトリガーして、次のコード サンプルを修正します。LVarArray[0] {const IDispatch}, is null for some reason.
procedure TWebBrowser.InvokeEvent(ADispID: TDispID; var AParams: TDispParams);
// DispID 250 is the BeforeNavigate2 dispinterface and to the FFileSource here
// is stored the URL parameter (for cases, when the IDownloadManager::Download
// won't redirect the URL and pass empty string to the pszRedir)
//showmessage('test');
var
ArgCount : Integer;
LVarArray : Array of OleVariant;
LIndex : Integer;
begin
inherited;
ArgCount := AParams.cArgs;
SetLength(LVarArray, ArgCount);
for LIndex := Low(LVarArray) to High(LVarArray) do
LVarArray[High(LVarArray)-LIndex] := OleVariant(TDispParams(AParams).rgvarg^[LIndex]);
case ADispID of
250: FFileSource := OleVariant(AParams.rgvarg^[5]);
273: DoNewWindow3(Self,
LVarArray[0] {const IDispatch},
WordBool((TVarData(LVarArray[1]).VPointer)^) {var WordBool},
LVarArray[2] {const OleVariant},
LVarArray[3] {const OleVariant},
LVarArray[4] {const OleVariant});
end;
end;