在 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_ICoreWebView2EnvironmentOptions
是 DelphiInterface
的 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 库的 CLSID
是 26D34152-879F-4065-BEA2-3DAA2CFADFB8
,而 ICoreWebView2EnvironmentOptions
的 IID
是 2FDE08A8-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 .
我试图在 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_ICoreWebView2EnvironmentOptions
是 DelphiInterface
的 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 库的 CLSID
是 26D34152-879F-4065-BEA2-3DAA2CFADFB8
,而 ICoreWebView2EnvironmentOptions
的 IID
是 2FDE08A8-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