2010-04-08 12 views
2

Можно ли узнать, в какой версии браузера запускается приложение для браузера (XBAP) (например, IE6, IE7 или IE8)? Я хочу узнать версию браузера из XBAP.Обнаружение версии браузера в WPF

+0

@Rob:.. Вы столкнетесь с необходимостью в этом случае так, что это – VoidDweller

+0

Для нашего приложения мы должны иметь способ сообщить, в каком? версия браузера наше приложение работает. Отчет создается для целей поддержки и имеет все виды системной информации. К сожалению, версия браузера влияет на поведение приложения. – Rob

ответ

1

С некоторой помощью от форума Microsoft меня привели в направлении, которое наконец-то работает. Ниже доказательство концепции в 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

Хорошая идея, спасибо! Здесь используются C# и WPF. У меня есть элемент управления WebBrowser в моем коде, и для любви к Богу я не мог найти, где получить версию браузера. Я использовал внешнюю html-страницу (то же место, что и мой .exe), загрузил ее как таковую: WebBrowserMain.Navigate ("pack: // siteoforigin: ,,,/useragent.html"); И изнутри useragent.html называется метод в моей программе через javascript, который собирает информацию агента пользователя. Спасибо! – Rowan

1

Предполагаю, вы имеете в виду Silverlight, а не WPF? (они являются отдельными технологиями, хотя и похожими).

Посмотрите на System.Windows.Browser.BrowserInformation Class

В частности

System.Windows.Browser.BrowserInformation.BrowserVersion 

На странице MSDN выше:

using System; 

с использованием System.Windows.Controls; с использованием 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 (приложение для браузера XAML) - это приложения WPF, которые могут быть размещен в браузере. http://msdn.microsoft.com/en-us/library/aa970060.aspx – VoidDweller

+0

Нет. Я действительно имею в виду приложение для браузера XAML. Я думаю, что использование вашего решения представляет новую зависимость от Silverlight. Спасибо в любом случае! Я нашел другое решение с некоторой помощью на форуме Microsoft, см. мой ответ на мой собственный вопрос. – Rob

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