在 C++Builder 11 中使用 ICoreWebView2EnvironmentOptions

Usage ICoreWebView2EnvironmentOptions in C++Builder 11

我试图在 TEdgeBrowser 中禁用 CORS,并通过使用 ICoreWebView2EnvironmentOptions 找到了很多解决方案,因为 TEdgeBrowser 是由 WebView2 实现的。

Microsoft's document中,示例代码似乎用于Visual C++,C++ Builder不适用:

auto options = Microsoft::WRL::Make<CoreWebView2ExperimentalEnvironmentOptions>();

这是我在 C++ Builder 11 中尝试过的代码:

_di_ICoreWebView2EnvironmentOptions *m_WV2_EnvOpt = new _di_ICoreWebView2EnvironmentOptions();
m_WV2EnvOpt->put_AdditionalBrowserArguments(L"--disable-web-security");

它将在 m_WV2EnvOpt->put_AdditionalBrowserArguments() 后失败。

我不知道,也许我走错了路。有人可以帮助我吗?

_di_ICoreWebView2EnvironmentOptionsDelphiInterface 的 typedef 持有 ICoreWebView2EnvironmentOptions* 指针。您不在 DelphiInterface 本身上使用 new,您 new 实现接口的 class,例如:

class TCoreWebView2EnvironmentOptionsImpl : public ICoreWebView2EnvironmentOptions
{
    // implement IUnknown and ICoreWebView2EnvironmentOptions as needed...
};

_di_ICoreWebView2EnvironmentOptions m_WV2_EnvOpt = new TCoreWebView2EnvironmentOptionsImpl;

但是,WRL 对象不是这样使用的。

在这种情况下,WebView2 库将 ICoreWebView2EnvironmentOptions 公开为 COM 对象,因此您可以使用 CoCreateInstance() 实例化它(WebView2 库的 CLSID26D34152-879F-4065-BEA2-3DAA2CFADFB8,而 ICoreWebView2EnvironmentOptionsIID2FDE08A8-1E9A-4766-8C05-95A9CEB9D1C5),例如:

_di_ICoreWebView2EnvironmentOptions m_WV2_EnvOpt;
CoCreateInstance(LIBID_WebView2, NULL, CLSCTX_INPROC_SERVER, IID_ICoreWebView2EnvironmentOptions, (LPVOID*)&m_WV2_EnvOpt);

但是,在这种情况下这对您没有帮助,因为您必须在创建 WebView2 对象时提供创建的 ICoreWebView2EnvironmentOptions 对象,而 AFAIK TEdgeBrowser 根本不允许您这样做。

您可以尝试在创建 WebView2 对象之前设置 WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS 环境变量,但是 AFAIK .