User Agent in einer WebView manipulieren
In einem Windows Phone 8.1 App soll eine Website angezeigt werden. Gelöst wird dies mit Hilfe einer WebView. Für das Projekt besteht kein Zugriff auf den Source Code der Website, es wird einzig der URL an die WebView übergeben, diese zeigt dann die Website an. Damit der richtige Content geliefert werden kann, muss der UserAgent geändert werden. Allerdings soll nicht der komplette UserAgent ersetzt werden, sondern nur ein neuer Teil angehängt werden, zum Beispiel der Hersteller und die Software Version des Smartphones. Daher muss der UserAgent erweitert werden. Also zuerst ausgelesen, angepasst und danach wieder gesetzt werden.
Die dll urlmod.dll liefert hier die gewünschten Methoden:
const int UrlmonOptionUseragent = 0x10000001; [DllImport("urlmon.dll", CharSet = CharSet.Ansi)] private static extern int UrlMkSetSessionOption(int dwOption, string pBuffer, int dwBufferLength, int dwReserved); [DllImport("urlmon.dll", CharSet = CharSet.Ansi)] private static extern int UrlMkGetSessionOption(int dwOption, StringBuilder pBuffer, int dwBufferLength, out int pdwBufferLength, int dwReserved);
Der Code um den UserAgent anzupassen muss vor dem Aufruf der WebView hinzugefügt werden. Der Aufruf sieht folgendermassen aus:
public static void ManipulateUserAgent() { var orgUserAgent = new StringBuilder(); int length; UrlMkGetSessionOption(UrlmonOptionUseragent, orgUserAgent, orgUserAgent.Capacity - 1, out length, 0); //Hier kann der bestehende UserAgent angepasst werden var userAgent = orgUserAgent + AddSomethingToUserAgent(); UrlMkSetSessionOption(UrlmonOptionUseragent, userAgent, userAgent.Length, 0); }
Der User Agent ist dadurch nicht nur für den ersten Aufruf geändert, sondern für die ganze Session. READ MORE