Как отобразить HTML-код браузера?

Я пытаюсь найти способ отображения одной ссылки на пользователя IE и другую ссылку на все другие браузеры с использованием javascript или условных комментариев (или что бы это ни потребовалось).

В основном...

//pseudo code
<!--[if IE]>
    <a href"ie-only.html">click here!</a>
<!--[else]>
    <a href"all-other-browsers.html">click here!</a>
<![endif]-->

Я не думаю, что это возможно с условными тегами комментариев (которые работают только в Internet Explorer). Плюс я не думаю, что есть инструкция "else".

Есть ли способ сделать это с помощью javascript? Пожалуйста помоги! Спасибо!

Ответ 1

Я не думаю, что это возможно с условными тегами комментариев (которые работают только в Internet Explorer)

Конечно. Вам просто нужно оставить контент для браузеров, отличных от IE, в такой позиции, что он является частью предложения условного комментария, но не на самом деле внутри <! - comment → . Тогда браузеры, которые не знают об условных комментариях, будут видеть контент в порядке. Это известно как условный комментарий нижний уровень.

К сожалению, разметка Microsoft дает вам недопустимый HTML (и даже не правильно сформированный XML). Чтобы заставить его пройти, вам просто нужно несколько дополнительных "-s:

<!--[if IE]> This is IE! <![endif]-->
<!--[if !IE]><!--> This ain't IE! <!--<![endif]-->

Хотя мне нужно эхо AnonJr не отвечать, так как вам редко нужно иметь отдельную ссылку/страницу для IE по сравнению с другими браузерами. Если вы делаете что-то сложное, как сложные VML и ActiveX, работающие в IE с Flash в других браузерах, я думаю, что для этого может быть причина, но обычно достаточно нескольких CSS и script хаков на одной и той же основной странице.

Ответ 2

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

Если разработчикам потребовалось дополнительное время (да, это требует времени и тяжелой работы. Если вы не можете убедить своих клиентов, что вы недостаточно стараетесь), мы бы не увидели, что IE7 "сломает сеть" и было бы еще меньше брухаха с IE8.

Да, IE менее совместим со стандартами, чем другие. Но Fx также пропускает некоторые вещи, которые также являются частью стандарта. Они все сосут, когда дело доходит до "стандартов". Но все наладилось. (По разным темпам, но они все улучшаются.)

Сначала подумайте, почему вы пытаетесь это сделать, и спросите себя, действительно ли вы хотите справиться с этим, когда выйдет следующая версия браузера, и вам нужно повторно зажечь обнаружение вашего браузера и как вы обрабатываете версию X браузера Y.

[/напыщенная]

Изменить: Чтобы ответить на некоторые комментарии, которые указывают на очевидный факт, что я действительно не отвечал на вопрос, без дополнительной информации этот вопрос заставляет меня задаться вопросом, не пытаемся ли мы помочь человек решает забивать гвоздь с помощью стеклянной бутылки или обуви...

Ответ 3

Это одобренный Microsoft способ:

<!--[if IE]>
    <a href="ie-only.html">click here!</a>
<![endif]-->
<![if !IE]>
    <a href="all-other-browsers.html">click here!</a>
<![endif]>

Дополнительная информация доступна на http://msdn.microsoft.com/en-us/library/ms537512(VS.85).aspx.

Изменить

Этот код неявно гарантированно работает во всех текущих и будущих версиях IE, начиная с IE 5. Для браузеров, отличных от IE, код работает, полагаясь на те браузеры, которые игнорируют "бессмысленный" тег <![if !IE]>, который они все делаю, и я никогда не видел, чтобы это терпило неудачу. Для версии, которая не использует ничего, кроме хороших комментариев HTML, см. bobince answer, который я действительно предпочитаю предоставленному Microsoft.

Ответ 4

Возможно, выстрел в темноте, но будет ли это работать?

<style>

    a.forIeOnly {display: none; }
    a.notForIe  {display: block; }

</style>

<!--[if ie]>

<style>
    a.forIeOnly {display: block;}
    a.notForIe  {display: none; }
</style>

<![endif]-->

<a href="#" class="forIeOnly">Link One</a>
<a href="#" class="notForIe">Link Two</a>

Это нигде рядом с чистым/привлекательным, поскольку утверждение if/else может быть, но... это был самый простой способ реализовать решение. Хотя это может быть чревато всеми проблемами.

Ответ 5

Один из способов, который я выяснил, как это сделать:

Получить код javascript из http://www.quirksmode.org/js/detect.html и поместить его в тег <head>.

Затем в тэге <body> используйте:

<script type="text/javascript">
<!--
if (BrowserDetect.browser == 'Explorer') {
    document.write('<a href="#">Explorer</a>');
} else {
    document.write('<a href="#">Other Browsers</a>');
}
// -->
</script>

Не уверен, что это самый простой способ сделать это, но он выполнил свою работу.

Ответ 7

Вы всегда можете использовать CSS, чтобы скрыть код от определенных браузеров. Например, учитывая следующий код:

<a href"ie-only.html" id="ie-only">click here!</a>
<a href"all-other-browsers.html" id="other-browsers">click here!</a>

Вы можете применить следующие хаки CSS, и соответствующие ссылки будут отображаться в соответствующих браузерах.

/* Display settings for most browsers */
#ie-only {display: none;}
#other-browsers {display: block;}

/* Display settings for IE <= 6 */
* html #ie-only {display: block;}
* html #other-browsers {display: none;}

Ответ 8

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

/*@cc_on
   /*@if (@_jscript)
      alert("IE.");
   @else @*/
      alert("Not IE.");
   /*@end
@*/

Ответ 9

Добавьте это в свой заголовок:

<script src="http://github.com/rafaelp/css_browser_selector/raw/master/css_browser_selector.js" type="text/javascript"></script>

Тогда что бы вы не захотели на странице .css:

/* Chrome Only */
.chrome embed {
    display: none;
}

/* Firefox Only */
.gecko video {
    display: none;
}

Источник: http://rafael.adm.br/css_browser_selector/

Доступные коды браузера [браузер]:

ie - Internet Explorer (All versions)
ie8 - Internet Explorer 8.x
ie7 - Internet Explorer 7.x
ie6 - Internet Explorer 6.x
ie5 - Internet Explorer 5.x
gecko - Mozilla, Firefox (all versions), Camino
ff2 - Firefox 2
ff3 - Firefox 3
ff3_5 - Firefox 3.5
ff3_6 - Firefox 3.6 new
opera - Opera (All versions)
opera8 - Opera 8.x
opera9 - Opera 9.x
opera10 - Opera 10.x
konqueror - Konqueror
webkit or safari - Safari, NetNewsWire, OmniWeb, Shiira, Google Chrome
safari3 - Safari 3.x
chrome - Google Chrome
iron - SRWare Iron