2016-09-14 4 views
5

мне нужно установить пользовательские UA и я используюИзменения по умолчанию User-Agent в WebView UWP

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

Но если я нажимаю на любую ссылку на странице этого UA стерт и установлен по умолчанию UA.

Я нашел тот же вопрос WebView - Define User-Agent on every request, но, возможно, он был исправлен в 1607 году?

+0

Вот хитроумный трюк: https://gist.github.com/mattdot/3b53af7756c061e06f60623c766f657a – Laith

ответ

6

WebView не является универсальным браузером, у него есть некоторые «ограничения», которые не поддерживаются сейчас. API не может установить User-Agent по умолчанию, который используется в каждом запросе. В качестве обходного пути мы можем использовать 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); 
} 

Кроме того, вы можете голосование на UserVoice, чтобы поделиться своими отзывами.

+0

Спасибо! Я попробую. –