Разница между этими WebKit ASP: исправления меню - PullRequest
2 голосов
/ 31 марта 2011

Я знаю, что существует масса постов по проблеме ASP: Меню против WebKit в целом, но я не могу найти ту, которая отвечает на мой вопрос.

Я часто вижу людей, рекомендующих два разных метода для исправленияпроблема с ASP:Menu s в браузерах Apple WebKit (например, Chrome, Safari).Но что на самом деле лучше?В чем разница между этими двумя действиями, кроме целевого пользовательского агента?Единственное различие, которое я обнаружил, заключается в том, что второй также будет работать на событии Page_Load.Я предполагаю, что одно объективно превосходит другое, но я не знаю разницы между ними.Как работает каждый из них?

Оба идут по методу Page_PreInit() базовой страницы.

1. Очистите адаптеры браузера.

if (Request.UserAgent.Contains("AppleWebKit"))
{
    Request.Browser.Adapters.Clear();
}

2. Изменение цели клиента.

if (Request.UserAgent.Contains("Safari"))
{
    Page.ClientTarget = "uplevel";
}

Пользовательский агент по умолчанию для Google Chrome выглядит следующим образом.Он содержит как Safari, так и WebKit, поэтому я сомневаюсь, что целевой пользовательский агент имеет существенную разницу.

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.X.Y.Z Safari/525.13.

1 Ответ

6 голосов
/ 08 апреля 2011

Хорошо, я «решил» это сам, потому что никто, очевидно, не знает.Фактический ответ заключается в том, что ASP.NET распознает браузеры, использующие WebKit, как браузеры «нижнего уровня», то есть они предположительно не способны обрабатывать современные HTML или JavaScript.Чтобы компенсировать это, ASP.NET по-разному отображает разметку меню, используя «Адаптеры».

В ситуации 2. (изменение цели клиента) клиент вынужден распознаваться как * 1005.* браузер.Следовательно, меню отображается нормально, как это было бы для Internet Explorer или FireFox.

В ситуации 1. (очистка адаптеров браузера), клиент по-прежнему рассматривается как нисходящий иадаптер вставляется для компенсации предположительно старого браузера, но перед его использованием все адаптеры сбрасываются.

Таким образом, , я заключаю, что технически метод 2. лучше, потому что

  1. Эффективно останавливает компенсацию браузера нижнего уровня перед использованием адаптера.
  2. Он правильно распознает браузер как верхний уровень, если этот факт используется в другом месте.в приложении.
  3. Он не очищает адаптеры, которые могут на законных основаниях использоваться пользователем для других целей.
  4. Как я уже говорил в моем заявлении о проблеме, его можно использовать на *Метод 1025 *, а не метод Page_PreInit, что позволяет добавлять его на главную страницу без необходимости наследовать базовую страницу.
...