如何在新的 Delphi TEdgeBrowser中设置用户代理?

mbjcgjjk  于 2023-03-12  发布在  其他
关注(0)|答案(2)|浏览(282)

我需要更改TEdgeBrowser中的用户代理
如何在新的 Delphi TEdgeBrowser VCL中设置用户代理?
也欢迎任何变通方案!

ie3xauqp

ie3xauqp1#

根据Microsoft documentation的说法,这只在预发布版本中可用,所以它在 Delphi TEdgeBrowser中还不可用。

91zkwejq

91zkwejq2#

我找到了解决办法。
微软已经更新了WebView2并增加了改变用户代理的功能。但是Embarcadero还没有更新该组件。
创建新接口

unit Webview2Ex;

interface

uses
    WebView2;

const
   IID_ICoreWebView2Settings2: TGUID = '{EE9A0F68-F46C-4E32-AC23-EF8CAC224D2A}';

type

  ICoreWebView2Settings2 = interface(ICoreWebView2Settings)
    ['{EE9A0F68-F46C-4E32-AC23-EF8CAC224D2A}']
    function Get_UserAgent(out UserAgent: PWideChar): HResult; stdcall;
    function Set_UserAgent(UserAgent: PWideChar): HResult; stdcall;
  end;

implementation

end.

在CreateWebView完成时创建处理程序

procedure TAiForm.RBrowserCreateWebViewCompleted(Sender: TCustomEdgeBrowser;
          AResult: HRESULT);
        var
            Ctrl2     : ICoreWebView2Settings2;
            HR        : HRESULT;
            UA        : PWideChar;
        begin
//You must query SettingsInterface2 from SettingsInterface it's important
         Sender.SettingsInterface.QueryInterface(IID_ICoreWebView2Settings2, Ctrl2);
            if not Assigned(Ctrl2) then
                raise Exception.Create('ICoreWebView2Settings2 not found');
        
            UA := 'NEW UA';
            HR := Ctrl2.Set_UserAgent(UA);
        
            HR := Ctrl2.Get_UserAgent(UA);
            if not SUCCEEDED(HR) then
                raise Exception.Create('Get_UserAgent failed')
                else ShowMessage(ua);
        end;

还需要从Microsoft更新WebView2组件
https://developer.microsoft.com/en-us/microsoft-edge/webview2/
如果你想更新所有的接口阅读本文
WebView2 (TEdgeBrowser) updated Delphi interface (e.g. ICoreWebView2Controller2)

相关问题