Hallo,
in einem Projekt prüfen wir ob ein Wechsel von cef3 auf Edge möglich wäre.
Da die Anwendung auch Dateien herunterladen und gezielt ablegen können soll, suche ich nach einem Weg das zu tun.
Hier mal mein versuchter Weg das über WebResourceRequested umzusetzen:
Code:
procedure Tdownload.EdgeBrowser1WebResourceRequested(Sender: TCustomEdgeBrowser; Args: TWebResourceRequestedEventArgs);
var request: ICoreWebView2WebResourceRequest;
requestURI, responseHeaders, method: PWideChar;
response: ICoreWebView2WebResourceResponse;
requestFilename, localFilename, payload: string;
headers: ICoreWebView2HttpRequestHeaders;
requestStringStream, : IStream;
core:ICoreWebView2;
sett:ICoreWebView2Settings;
begin
Args.ArgsInterface.Get_Request(request);
request.Get_uri(requestURI); //kann man sich anschauen wenn man will :)
//Teile dem Server ein paar Infos über mich mit
request.Get_Headers(headers);
headers.SetHeader('User-Agent', PChar('TestBrowserDownload v' + GetVersion));
headers.SetHeader('Content-Type', PChar('application/x-www-form-urlencoded'));
request.Set_Method('POST');
payload := 'a=textusw';
requestStringStream := TStreamAdapter.Create(TStringStream.Create(payload, TEncoding.UTF8), soOwned);
request.Set_Content(requestStringStream);
//Versuch IStream für den Dateitransfer zur Verfügung zu stellen...
Args.ArgsInterface.Get_Response(response);
requestFileStream := TStreamAdapter.Create(TFileStream.Create(extractfilepath(paramstr(0)) + 'test.dat', fmCreate or fmOpenReadWrite or fmShareDenyNone), soOwned);
response.Set_Content(requestFileStream);
end;
Er kann die Datei zwar anlegen, danach kommt aber eine Zugriffsverletzung auf 0x00000000. Meine Vermutung ist, dass IStream zum Zeitpunkt des hineinschreibens bereits freigegeben worden ist.
Was mache ich hier falsch?
Alternativ gibt es laut Microsoft-Doku (
https://docs.microsoft.com/en-us/dot...et-1.0.1150.38) wohl ein "DownloadStarting" Event, mit dem ich das auch machen könnte. Das ist leider aber nicht in der WebView2.pas gekapselt worden (ich kenne also das Interface nicht und kann auch mit Interfaces noch nicht so richtig).
Viele Grüße