微软C++ webview2在add_NavigationStarting方法中可以获取重定向地址吗,如果可以详细介绍下怎么获取,并给出详细demo
时间: 2024-06-09 15:05:16 浏览: 223
在 WebView2 中,可以使用 NavigationStarting 事件获取导航开始的通知。你可以在该事件的回调函数中获取导航的 URL,并在重定向时获取重定向的 URL。
下面是一个示例代码,演示如何获取导航的 URL 和重定向的 URL:
```cpp
#include <WebView2.h>
#include <iostream>
#include <string>
using namespace std;
// NavigationStarting 事件回调函数
HRESULT STDMETHODCALLTYPE NavigationStarting(
IWebView2* webview, IWebView2NavigationStartingEventArgs* args)
{
// 获取导航的 URL
LPWSTR uri;
args->get_Uri(&uri);
wstring url(uri);
CoTaskMemFree(uri);
wcout << L"NavigationStarting: " << url << endl;
// 判断是否是重定向
BOOL isRedirected;
args->get_IsRedirected(&isRedirected);
if (isRedirected)
{
// 获取重定向的 URL
LPWSTR redirectedUri;
args->get_RequestHeaders(&redirectedUri);
wstring redirectedUrl(redirectedUri);
CoTaskMemFree(redirectedUri);
wcout << L"Redirected to: " << redirectedUrl << endl;
}
return S_OK;
}
int main()
{
// 初始化 WebView2 环境
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
IWebView2Environment* env;
CreateWebView2Environment(NULL, NULL, NULL,
Callback<IWebView2CreateWebViewCompletedHandler>(
[](HRESULT result, IWebView2WebView* webview) -> HRESULT
{
// 注册 NavigationStarting 事件回调函数
webview->add_NavigationStarting(
Callback<IWebView2NavigationStartingEventHandler>(
NavigationStarting).Get(), NULL);
// 加载一个网页
webview->Navigate(L"https://www.microsoft.com");
return S_OK;
}).Get(),
&env);
// 创建 WebView2 控件
IWebView2WebView* webview;
env->CreateWebView(NULL, Callback<IWebView2CreateWebViewCompletedHandler>(
[&webview](HRESULT result, IWebView2WebView* wv) -> HRESULT
{
webview = wv;
return S_OK;
}).Get());
// 进入消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// 释放资源
webview->Close();
webview->Release();
env->Release();
CoUninitialize();
return 0;
}
```
在上面的示例代码中,我们注册了 NavigationStarting 事件回调函数,并在回调函数中获取导航的 URL。如果导航是一个重定向,我们也可以获取重定向的 URL。注意,在获取 URL 后需要使用 `CoTaskMemFree` 函数释放内存。
阅读全文