내 델파이 앱을 웹 사이트에 로그인하고 페이지를 탐색하여 자동으로 특정 파일을 다운로드하려는 경우 How do I keep an embedded browser from prompting where to save a downloaded file?의 솔루션을 사용하면 파일 다운로드에 많은 도움이됩니다.twebbrowser in popupwindow
마지막 문제는 팝업 창에서 열리는 마지막 단계입니다. TWebBrowser.NewWindow2를 구현하여 팝업 창을 캡처 할 수있는 많은 솔루션이 있지만 위의 코드와 아무런 관련이없는 것 같습니다. 위의 코드에서 twebbrowser.invokeevent가 어쩌면 작동하는지는 알 수 있습니까?
invokeveent를 사용하고 273 (newwindow3)의 dispID를 사용하여 함수를 호출하면 popupwindow의 url에 두 번째 웹 브라우저를 twebbwowser.navigate() 할 수 있습니다.
내 문제는 팝업 창에 javascript "document.print (parent.parent.opener.thefunction())"의 기본 행이 두 번째 twebbrowser에 부모에 대한 참조가 없으므로 실패합니다.
나는 두 가지 가능한 솔루션을 볼 수 있습니다. TWebBrowser.NewWindow2 또는 3을 트리거하려면 LVarArray [0] {const IDispatch} 코드 샘플을 수정하십시오. 어떤 이유로 든 null입니다.
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;
다운로드 한 파일이 서버 측에서 생성 되더라도? –
예, 별 차이가 없습니다. 그것은 모두 HTTP입니다. Indy 구성 요소 또는 실제로 다른 모든 메커니즘과 마찬가지로 브라우저에서도 마찬가지입니다. –
좋아 다시 드로잉 보드로 돌아가서 URL을 모른다면 어쨌든 직접 http 다운로드를 사용하는 방법을 모르겠다. 어쨌든 작동하도록 위의 코드를 얻었으니 지금은 ASP 페이지를 다운로드하지 않는다. –