Определение версии браузера в WPF

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


person Rob    schedule 08.04.2010    source источник
comment
@Rob: Вы столкнулись с потребностью в этом? Если так, то, что это?   -  person VoidDweller    schedule 08.04.2010
comment
Для нашего приложения нам нужен способ сообщить, в какой версии браузера работает наше приложение. Отчет создается для целей поддержки и содержит все виды системной информации. К сожалению, версия браузера влияет на поведение приложения.   -  person Rob    schedule 13.04.2010


Ответы (3)


С некоторой помощью форума 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;
}
person Rob    schedule 12.04.2010
comment
Хорошая идея, спасибо! Здесь используются C# и WPF. В моем коде есть элемент управления WebBrowser, и, ради всего святого, я не смог найти, где взять версию браузера. Что я сделал, так это использовал внешнюю html-страницу (в том же месте, что и мой .exe), загрузил ее как таковую: WebBrowserMain.Navigate(pack://siteoforigin:,,,/useragent.html); И изнутри useragent.html вызвал метод в моей программе через javascript, который собирает информацию о пользовательском агенте. Огромное спасибо! - person Rowan; 28.08.2016

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

Взгляните на System.Windows.Browser.BrowserInformation Класс

Конкретно

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";

   }
}
person Mark Pim    schedule 08.04.2010
comment
XBAP (браузерное приложение XAML) — это приложения WPF, которые можно размещать в браузере. msdn.microsoft.com/en-us/library/aa970060.aspx - person VoidDweller; 08.04.2010
comment
Нет, я действительно имею в виду приложение браузера XAML. Я думаю, что использование вашего решения вводит новую зависимость от Silverlight. Спасибо, в любом случае! Я нашел другое решение с некоторой помощью на форуме Microsoft, см. мой ответ на мой собственный вопрос. - person Rob; 12.04.2010

person    schedule
comment
Добавьте больше деталей, чтобы объяснить, почему и как это отвечает на вопрос. - person Manoj Choudhari; 26.12.2019