2016-04-17 4 views
1

UWPアプリWebBrowserコントロールのユーザーエージェントヘッダーをグローバルに変更するにはどうすればよいですか?UWPアプリWebBrowserコントロールのユーザーエージェントヘッダーの変更

私はこのカスタムUser-Agentヘッダを使用していないようだWebページからのリダイレクトwebbrwser制御

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

が、どの内部リンクにロードされた初期URLにUser-Agentヘッダを変更することができます。

+0

実際のソリューションはありませんが、Win32 API ['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とリクエストをキャンセルする機能のみを公開しています。それは、どんなタイプの要求であったのか、その意図がどこから来たのかを明らかにしません。このため、元のナビゲーション意図を再現することは不可能であり、ナビゲーションバグが表示されるようになります。

たとえば、ボタンのクリック時にPOST要求を行うJavaScript要素があるWebページや、これらの要求を傍受してGET要求として再作成すると、要求が失敗し、ユーザーの処理が失われます。

MicrosoftがWebViewでこの動作を変更するまで、私はUAを意味のある変更が可能ではないと思います。

関連する問題