it-roy-ru.com

проверьте, является ли браузер хромом или краем

Мой текущий веб-сайт работает только в браузере Chrome, для этого я проверил следующим образом 

if (Request.Browser.Browser == "Chrome")
{
   // Allow
}

Но для Edge также он возвращается только как "Chrome".

Как я могу разрешить доступ только из браузера Chrome?

10
Shaggy

Вы можете проверить user-agent и посмотреть, является ли он Microsoft Edge или нет, потому что Microsoft Edge содержит Edge/version в своей строке user-agent.

//get user agent somehow here based on what you are working on
userAgent = Request.UserAgent;

if (userAgent.IndexOf("Edge") > -1)
{
   // maybe client's browser is Microsoft Edge
}

образец строк пользовательского агента Edge

Mozilla/5.0 (X11; CrOS x86_64 6783.1.0) AppleWebKit/537.36 (KHTML, like Gecko) Edge/12.0

Смотрите больше здесь и здесь

В конце я предлагаю использовать функцию обнаружения в браузере, а не действовать на основе пользовательского агента.

17
Hamid Pourjam

Мне любопытно - каков вариант использования? Независимо от того, вы идете:

Microsoft Edge UA строка:

Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, как Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136

Я подробно, почему в этом сообщении в блоге.

Neowin недавно сообщил, что в новом браузере Microsoft для Windows 10, Spartan, используется строка Chrome UA «Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, как Gecko) Chrome/39.0.2171.71 Safari/537.36» Edge/12.0 ″.Это сделано специально.

Вы также заметите, что вся строка оканчивается на «Edge/12.0», чего нет в Chrome.

Я должен отметить, что это не редкое отклонение от того, что Microsoft сделала с IE 11, что в Windows 8 гласит: Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv: 11.0), как Gecko, как объяснено в этом посте.

Что такое агент пользователя?

Часто веб-разработчики используют UA для обнаружения браузера. Mozilla хорошо объясняет это в своем блоге:

Обслуживание разных веб-страниц или сервисов в разных браузерах обычно является плохой идеей. Веб должен быть доступен каждому, независимо от того, какой браузер или устройство они используют. Есть способы разработать свой веб-сайт, чтобы постепенно улучшать его, основываясь на доступности функций, а не нацеливаясь на конкретные браузеры.

Вот отличная статья, объясняющая историю агента пользователя.

Зачастую ленивые разработчики просто отыскивают строку UA и отключают контент на своем веб-сайте в зависимости от того, какой браузер, по их мнению, использует зритель. Internet Explorer 8 - это общая проблема для разработчиков, поэтому они часто проверяют, использует ли пользователь ЛЮБУЮ версию IE, и отключают функции.

Команда Edge подробно описывает это в своем блоге.

Все строки пользовательских агентов содержат больше информации о других браузерах, чем фактический браузер, который вы используете - не только токены, но и «значимые» номера версий.

Строка UA Internet Explorer 11:

Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv: 11.0), как Gecko

Microsoft Edge UA строка:

Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, как Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136

Патрик Х. Лауке в обсуждениях W3C метко описал свойство userAgent как «постоянно растущую пачку лжи». («Или, скорее, уравновешивающий процесс добавления достаточного количества унаследованных ключевых слов, которые сразу не приведут к падению старого UA-сниффинг-кода, в то же время пытаясь передать немного действительно полезной и точной информации».)

Мы рекомендуем, чтобы веб-разработчики максимально избегали прослушивания UA; функции современных веб-платформ обнаруживаются практически всеми способами. За прошедший год мы видели несколько сайтов, отслеживающих UA, которые были обновлены для обнаружения Microsoft Edge… только для того, чтобы предоставить ему устаревший путь кода IE11. Это не лучший подход, поскольку Microsoft Edge соответствует поведению «WebKit», а не поведению IE11 (любые отличия Edge-WebKit - это ошибки, которые мы заинтересованы в исправлении). 

По нашему опыту, Microsoft Edge лучше всего работает с путями кода «WebKit» на этих сайтах. Кроме того, в связи с тем, что Интернет становится доступным на более широком спектре устройств, предположите, что неизвестные браузеры хороши - пожалуйста, не ограничивайте свой сайт работой только в небольшом наборе известных браузеров. Если вы сделаете это, ваш сайт почти наверняка сломается в будущем.

Заключение

Представляя строку Chrome UA, мы можем обойти хаки, которые используют эти разработчики, чтобы предоставить пользователям лучший опыт.

2
Dave Voyles - MSFT
if(HttpContext.Current.Request.UserAgent.Contains("Edge"))
{
   // Allow
}

Работал на меня.

1
meJustAndrew

Я использую обнаружение браузера при регистрации ошибок JavaScript, так как полезно знать, в каком браузере произошла ошибка. 

Первоначально из этот вопрос я использовал запись в папке App_Browsers:

<browser id="Edge" parentID="Chrome">
  <identification>
    <userAgent match="Edge/(?'version'(?'major'\d+)(?'minor'\.\d+))" />
  </identification>
  <capabilities>
    <capability name="browser" value="Edge" />
    <capability name="version" value="${version}" />
    <capability name="majorversion" value="${major}" />
    <capability name="minorversion" value="${minor}" />
  </capabilities>
</browser>

Но это было противоречиво и иногда сообщалось о Chrome, поэтому теперь я дополнительно использую этот класс-обертку:

using System.Web;

public class BrowserInfo
{
    public BrowserInfo(HttpRequestBase request)
    {
        if (request.Browser != null)
        {
            if (request.UserAgent.Contains("Edge")
                && request.Browser.Browser != "Edge")
            {
                Name = "Edge";
            }
            else
            {
                Name = request.Browser.Browser;
                Version = request.Browser.MajorVersion.ToString();
            }
            Browser = request.Browser;
            Platform = request.Browser.Platform;
            IsMobileDevice = request.Browser.IsMobileDevice;
            if (IsMobileDevice)
            {
                Name = request.Browser.Browser;
                Name = request.Browser.Browser;
            }
        }
    }

    public HttpBrowserCapabilitiesBase Browser { get; }
    public string Name { get; }
    public string Version { get; }
    public string Platform { get; }
    public bool IsMobileDevice { get; }
    public string MobileBrand { get; }
    public string MobileModel { get; }
}
0
AGB