【问题标题】:Change default User-Agent in WebView UWP更改 WebView UWP 中的默认用户代理
【发布时间】:2017-01-22 06:13:21
【问题描述】:
我需要设置自定义 UA 并且我使用
httpRequestMessage.Headers.Add("User-Agent", "blahblah");
theWebView.NavigateWithHttpRequestMessage(httpRequestMessage);
但是,如果我点击页面上的任何链接,此 UA 会删除并设置默认 UA。
我发现了同样的问题
WebView - Define User-Agent on every request 但也许它在 1607 年修复了?
【问题讨论】:
标签:
c#
webview
windows-store-apps
win-universal-app
uwp
【解决方案1】:
WebView 不是通用浏览器,它确实有一些当前不支持的“限制”。没有 API 可以设置在每个请求中使用的默认用户代理。作为一种解决方法,我们可以使用 WebView.NavigationStarting event 和 WebView.NavigateWithHttpRequestMessage method 在每个请求中设置 User-Agent。
有关如何执行此操作的更多信息,请参阅this answer。这里的关键是删除NavigationStarting事件的处理程序并取消原始请求中的导航,然后在NavigateWithHttpRequestMessage之后添加处理程序以确保NavigationStarting事件可以捕获下一个请求,如下所示:
WebView wb = new WebView();
wb.NavigationStarting += Wb_NavigationStarting;
...
private void NavigateWithHeader(Uri uri)
{
var requestMsg = new Windows.Web.Http.HttpRequestMessage(HttpMethod.Get, uri);
requestMsg.Headers.Add("User-Agent", "blahblah");
wb.NavigateWithHttpRequestMessage(requestMsg);
wb.NavigationStarting += Wb_NavigationStarting;
}
private void Wb_NavigationStarting(WebView sender, WebViewNavigationStartingEventArgs args)
{
wb.NavigationStarting -= Wb_NavigationStarting;
args.Cancel = true;
NavigateWithHeader(args.Uri);
}