2010-04-08 8 views
2

Est-il possible de savoir dans quelle version du navigateur fonctionne une application hébergée par le navigateur (XBAP) (par exemple IE6, IE7 ou IE8)? Je veux trouver la version du navigateur à partir de la XBAP.Détection de la version du navigateur dans WPF

+0

@Rob:.. Avez-vous rencontrez un besoin pour ce cas, quel est-il – VoidDweller

+0

Pour notre application, nous devons avoir une façon de faire rapport à quoi? version du navigateur notre application est en cours d'exécution.Le rapport est généré à des fins de support et contient toutes sortes d'informations système Malheureusement, la version du navigateur a une influence sur le comportement de l'application – Rob

Répondre

1

Avec l'aide d'un forum Microsoft, j'ai été conduit dans une direction qui fonctionne enfin. Ci-dessous une preuve de concept en C++ NET (

using namespace System::Windows::Forms; 

[STAThread] 
String^ GetBrowserVersion() { 
    String^ strResult = String::Empty; 
    WebBrowser^ wb = gcnew WebBrowser();    
    String^ strJS = "<SCRIPT>function GetUserAgent() { return navigator.userAgent; }</SCRIPT>"; 
    wb->DocumentStream = gcnew MemoryStream(ASCIIEncoding::UTF8->GetBytes(strJS));    
    while (wb->ReadyState != WebBrowserReadyState::Complete) { 
     Application::DoEvents(); 
    } 
    String^ strUserAgent = (String^)wb->Document->InvokeScript("GetUserAgent"); 
    wb->DocumentStream->Close(); 
    String^ strBrowserName = String::Empty; 
    int i = -1; 
    if ((i = strUserAgent->IndexOf("MSIE")) >= 0) {   
     strBrowserName = "Internet Explorer"; 
    } else if ((i = strUserAgent->IndexOf("Opera")) >= 0) { 
     strBrowserName = "Opera"; 
    } else if ((i = strUserAgent->IndexOf("Chrome")) >= 0) { 
     strBrowserName = "Chrome"; 
    } else if ((i = strUserAgent->IndexOf("FireFox")) >= 0) { 
     strBrowserName = "FireFox"; 
    } 
    if (i >= 0) { 
     int iStart = i + 5; 
     int iLength = strUserAgent->IndexOf(';', iStart) - iStart; 
     strResult = strBrowserName + " " + strUserAgent->Substring(iStart, iLength); 
    } 
    return strResult; 
} 
+0

Bonne idée, merci! En utilisant C# et WPF ici. J'ai un contrôle WebBrowser dans mon code et pour l'amour de Dieu je ne pouvais pas trouver où obtenir la version du navigateur. Ce que j'ai fait était d'utiliser une page html externe (même emplacement que mon .exe), chargé en tant que tel: WebBrowserMain.Navigate ("pack: // siteoforigin: ,,,/useragent.html"); Et depuis useragent.html a appelé une méthode dans mon programme via javascript qui recueille les informations de l'agent utilisateur. Merci beaucoup! – Rowan

1

Je présume que vous voulez dire Silverlight plutôt que WPF? (Ce sont des technologies distinctes, bien que similaires).

Jetez un oeil à la System.Windows.Browser.BrowserInformation Class

Plus précisément

System.Windows.Browser.BrowserInformation.BrowserVersion 

A partir de la page MSDN ci-dessus:

using System; 

utilisant System.Windows.Controls; en utilisant System.Windows.Browser;

public class Example 
{ 
    public static void Demo(System.Windows.Controls.TextBlock outputBlock) 
    { 
    outputBlock.Text += 
     "\nSilverlight can provide browser information:\n" 
    + "\nBrowser Name = " + HtmlPage.BrowserInformation.Name 
    + "\nBrowser Version = " + 
      HtmlPage.BrowserInformation.BrowserVersion.ToString() 
    + "\nUserAgent = " + HtmlPage.BrowserInformation.UserAgent 
    + "\nPlatform = " + HtmlPage.BrowserInformation.Platform 
    + "\nCookiesEnabled = " + 
      HtmlPage.BrowserInformation.CookiesEnabled.ToString() + "\n"; 

    } 
} 
+0

XBAP (Application de navigateur XAML) - Les applications WPF peuvent-elles être hébergé dans un navigateur http://msdn.microsoft.com/en-us/library/aa970060.aspx – VoidDweller

+0

Non, je veux dire en effet une application de navigateur XAML Je pense que l'utilisation de votre solution introduit une nouvelle dépendance à Silverlight. J'ai trouvé une autre solution avec un peu d'aide d'un forum Microsoft, voir ma réponse à ma propre question. – Rob

Questions connexes