将TWebBrowser代码迁移到TEdgeBrowser,如何发送Post数据?

问题描述 投票:0回答:1

我正在尝试将一些代码从

TWebBrowser
转换为使用
TEdgeBrowser
,但我无法弄清楚如何使用 HTTP 请求发送帖子和标头数据。

下面是我正在尝试实现的

TWebBrowser
功能:

var
  VHeader, PostData: OleVariant;

PostData := VarArrayCreate([0, Length(XMLString) - 1], varByte) ;    
HeaderData := 'Content-Type: application/x-www-form-urlencoded'+ '\n';

WebBrowser1.Navigate(StrUrl,EmptyParam,EmptyParam,PostData,VHeader);

如何使用

TEdgeBrowser
或在
TWebBrowser
中使用
SelectedEngine := EdgeOnly
进行等效操作?

delphi twebbrowser tedgebrowser
1个回答
0
投票

我已经在c++builder中完成了,将其传递给delphi一定很容易。

从 TEdgeBrowser 中,您需要接口 _di_ICoreWebView2 ,然后从 _di_ICoreWebView2 接口 ICoreWebView2_2a ,从 ICoreWebView2_2 接口 _di_ICoreWebView2Environment ,然后通过强制转换 _di_ICoreWebView2Environment2

我在 EdgeBrowserCreateWebViewCompleted 事件上创建所有这些接口(因为我用 new 动态创建 TEdgeBrowser,它还没有准备好,所以我需要该事件)。

您必须创建资源并浏览到该资源(就像我在这里所做的那样):

_di_ICoreWebView2WebResourceRequest Request;
TMemoryStream *ms=new TMemoryStream();
TStreamAdapter *stra=new TStreamAdapter (ms,soReference);
ms->Write(Post.c_str(),strlen(Post.c_str()));
CurrentBrowser->env2->CreateWebResourceRequest(URL.c_bstr(),L"POST",stra->operator _di_IStream(),WideString("Content-Type: application/x-www-form-urlencoded\r\n").c_bstr(),Request);
if(Request)
    EdgeBrowser->NavigateWithWebResourceRequest(Request);

然后内容标头类型是在服务器中接收信息作为 POST 变量。

您创建一个 TStreamAdapter 来生成一个抽象的 _di_IStream ,无法直接实例化(这对我来说是更难找到的事情)

恢复的接口步骤如下:

_di_ICoreWebView2 Core2;
ICoreWebView2_2 *Core2_2;
_di_ICoreWebView2Environment env;
_di_ICoreWebView2Environment2 env2;

if(EdgeBrowser->ControllerInterface)
{
  EdgeBrowser->ControllerInterface->Get_CoreWebView2(Core2);
  if(Core2)
  {
    Core2->QueryInterface(IID_ICoreWebView2_2, (void **)&Core2_2);
    if(Core2_2)
    {
       Core2_2->Get_Environment(env);
       env2=env;
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.