0

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

Microsoft 的文档中,示例代码似乎用于 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()

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

4

1 回答 1

0

_di_ICoreWebView2EnvironmentOptions是用于DelphiInterface保存ICoreWebView2EnvironmentOptions*指针的 typedef。你不使用newDelphiInterface本身,你new是一个实现接口的类,例如:

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

_di_ICoreWebView2EnvironmentOptions m_WV2_EnvOpt = new TCoreWebView2EnvironmentOptionsImpl;

但是,WRL 对象不以这种方式使用。

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

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

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

您可以尝试WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS在创建 WebView2 对象之前设置环境变量,但 AFAIK此方法不支持--disable-web-securityoption

于 2022-01-19T19:48:46.303 回答