delphi 在TEdgeBrowser中禁用安全性

5fjcxozz  于 2023-01-20  发布在  其他
关注(0)|答案(2)|浏览(598)

我在C#中看到过这样的例子:人们通过更改CoreWebView2EnvironmentOptions来禁用WebView2中的安全性(这样用户就不必在出现证书错误时单击“继续”),但我一辈子都想不出如何在 Delphi 中对TEdgeBrowser组件执行等效操作。
编辑:Updated with a C# solution.

async void InitializeAsync()
        {
            var op = new CoreWebView2EnvironmentOptions("--disable-web-security");
            var env = await CoreWebView2Environment.CreateAsync(null, null, op);
            await webView.EnsureCoreWebView2Async(env);
        }

Another work around in C#:

var result = await webView.CoreWebView2.CallDevToolsProtocolMethodAsync("Security.setIgnoreCertificateErrors", "{\"ignore\": true}");
m1m5dgzv

m1m5dgzv1#

不幸的是, Delphi 仍然没有提供控制CoreWebView2EnvironmentOptions的好方法。
相反,您可以使用WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS环境变量来完成此操作:

SetEnvironmentVariable('WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS',
  '--ignore-certificate-errors');
EdgeBrowser.CreateWebView;

请注意,--disable-web-security不会删除证书警告,但--ignore-certificate-errors可以做到这一点。

5cnsuln7

5cnsuln72#

Delphi 发布的TEdgeBrowser存在一些问题,这些问题甚至在Delphi Alexandria也存在,其中最明显的是,它是在2020年WebView 2最开始的时候构思出来的。
Delphi 附带的WebView 2单元在功能方面远远落后于今天从最新版本的WebView2.tlb生成的单元。此外,我发现Delphi附带的WebView 2单元中存在的ICoreWebView 2 EnvironmentOptions接口的GUID是 WRONG。当将此GUID与从最新类型库生成的WebView 2单元的GUID进行比较时,我注意到他们是不同的,我相信这是不正常的。
要解决您的问题,您需要将Vcl.Edge.pas文件复制到项目中,并修改TCustomEdgeBrowser.InitializeWebView方法。在该方法中创建一个实现ICoreWebView 2 EnvironmentOptions接口的类的示例。您可以在“WebView 4Delphi”中复制现有解决方案(该示例位于TWVLoader.CreateEnvironment中)。您还需要使用uWVTypeLibrary单元,该单元包含正确的GUID来代替 Delphi (Winapi.WebView2.pas)附带的原始GUID,并且该单元已经包含了萨尔瓦多Días Fau所做的一组修复。
对我来说,这个解决方案很有效,我在组件上公开了一个属性,允许我向Edge传递额外的启动参数,在那里我只传递“--ignore-certificate-errors”,Edge忽略证书错误!
如果有人想知道我为什么要费这么大的劲而不使用WebView 4Delphi,答案很简单:TEdgeBrowser对于我来说,更容易使用,因为它只有一个组件和一个方法来执行,所以一切都像它应该的那样工作。如果将来我需要从界面中得到其他东西,我会参考WebView 4Delphi,并尝试在我的TEdgeBrowser Frankenstein中实现;)

相关问题