在WebView UWP中更改默认的User-Agent

7

我需要设置自定义UA并且我使用

httpRequestMessage.Headers.Add("User-Agent", "blahblah");
theWebView.NavigateWithHttpRequestMessage(httpRequestMessage);

但是如果我在页面上点击任何链接,这个UA就会被清除并设置为默认UA。

我发现了相同的问题WebView - 每次请求都定义用户代理,但也许在1607年中已经解决了?


这里有一个绝妙的技巧:https://gist.github.com/mattdot/3b53af7756c061e06f60623c766f657a - Laith
1个回答

9

WebView不是通用浏览器,它确实有一些当前不支持的“限制”。没有API可以设置默认的User-Agent,该User-Agent在每个请求中使用。作为解决方法,我们可以使用WebView.NavigationStarting事件WebView.NavigateWithHttpRequestMessage方法来设置每个请求中的User-Agent。

有关如何执行此操作的更多信息,请参见此答案。关键点在于删除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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接