2016-04-17 2 views
1

Как глобально изменить заголовок пользовательского агента в UWP-приложении Управление WebBrowser?Изменение заголовка пользовательского агента в приложении UWP Управление WebBrowser

я могу изменить заголовок агента пользователя в начальный URL загруженного в управлении webbrwser

httpRequestMessage.Headers.Append("User-Agent", ...); 
browser.NavigateWithHttpRequestMessage(httpRequestMessage); 

но любой внутренней линии перенаправления с веб-страницы, кажется, не использовать этот пользовательский заголовок агента пользователя.

+0

Нет реального решения, но, возможно, с использованием API Win32 ['UrlMkSetSessionOption'] (https://msdn.microsoft.com/en-us/library/ms775125 (VS.85) .aspx) может быть полезно с приложениями UWP а также: https://basquang.wordpress.com/2014/04/26/wp8-1-changing-windows-phone-8-1-webview-default-user-agent-in-all-outbound-http-requests/ – sibbl

+0

На самом деле, я нашел путь. Мне нужно отменить навигацию в обработчике WebView Before_NavigationStarting и явно перейти к использованию того же кода с помощью httpsRequestMessage. – user1744147

+0

@sibbl Я пробовал это, хотя он работал нормально на эмулятор устройства повсюду, но мой Windows Phone 8.1 приложение не удалось сертификации в магазине Windows. Пришлось удалить эту ссылку '.dll', чтобы передать ее. Даже если вы вызываете это в событии 'NavigationStarting', это не приведет к тому, что тот же самый« url »будет снова и снова ударяться. – Jerin

ответ

0

В отличие от Android или iOS, Microsoft не раскрывает способ глобального изменения пользовательского агента в компоненте WebView.

Для отдельных GET или POST запросов, вы можете установить UA, как это:

Uri^ targetURL = ref new Uri("http://www.yourUrlString.com"); 
HttpClient^ newRequest = ref new HttpClient(); 
auto headers = newRequest->DefaultRequestHeaders; 
headers->UserAgent->TryParseAdd("your user-agent string here"); 
create_task(newRequest->GetAsync(targetUrl)).then([=](HttpResponseMessageData^ data) 
{ 
    //Your callback here 
}); 

С этой техникой, можно подключиться к WebView's NavigationStarting event и перехватывать каждый запрос, но я настоятельно рекомендую против него ,

WebViewNavigationStartingEventArgs только выведите Uri, на который вы собираетесь переходить, и возможность отменить запрос. Он не раскрывает, какой тип запроса был, и откуда взялось намерение. Из-за этого невозможно воссоздать первоначальное намерение навигации, и вы начнете видеть навигационные ошибки.

Например, некоторые веб-страницы имеют элементы JavaScript, которые делают запросы POST на нажатия кнопок, и если вы перехватываете эти запросы и воссоздаете их как запросы GET, запросы будут терпеть неудачу, и действие пользователя будет потеряно.

До тех пор, пока Microsoft не изменит это поведение в WebView, я не думаю, что можно существенно изменить UA.

Смежные вопросы