Создайте проверенную ссылку W3C с target = "_ blank" - PullRequest
9 голосов
/ 11 марта 2010

У меня есть следующий фрагмент HTML, который создает новое окно при нажатии:

<a href="/path/to/site" target="_blank">glide by the people</a>

Проблема в том, что он не проходит валидатор W3C. Как мне создать ссылку, подобную приведенной выше, которая действительно проверяет?

Ответы [ 11 ]

9 голосов
/ 11 марта 2010

Используйте этот тип документа:

<!DOCTYPE html PUBLIC "-//w3c//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhmtl1/DTD/xhmtl1-transitional.dtd"> 

1.0 переходный вмещает некоторый HTML-код "прежнего", включая target = "_ blank".

6 голосов
/ 11 марта 2010

Предполагая строгий XHTML, вы должны связать событие onclick с рассматриваемой привязкой.Примерно так:

<a href="/path/to/my/link" onclick="window.open('/path/to/my/link');return false;">My link</a>

Можно также утверждать, что вы должны связывать это действие onclick отдельно с внешним JavaScript из-за постепенного улучшения и отделения поведения от разметки, но это основной способ сделать это.

5 голосов
/ 11 марта 2010

Я думаю, вы задаете не тот вопрос. Атрибут target недопустим в строгом XHTML 1.0 независимо от того, вставляете ли вы его с помощью JavaScript или просто используете в ответе сервера.

Если вы действительно хотите этот атрибут, вы должны использовать другой тип документа, но это не совсем правильный ответ.

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

Вот как:

Сохраните ваши ссылки, но добавьте специальный класс, например, «всплывающее» им. Затем добавьте строку JavaScript (желательно с использованием инфраструктуры, такой как jQuery или Prototype, чтобы упростить его), которая берет все ссылки с этим классом и предоставляет им обработчик по нажатию, который приводит к созданию новой вкладки / окна и отменяет стандартную настройку действие (т. е. прекращает работу ссылки в качестве ссылки). Это все равно будет раздражать людей, поскольку оно отвергает ожидаемое поведение.

Чего не следует делать, так это заменять ссылки фиктивными ссылками и полагаться на JavaScript для работы ссылок.

Не обращайте внимания на это. Атрибут target больше не считается устаревшим в HTML (уровень жизни или «5», в зависимости от того, следуете ли вы WHAT WG или W3C). Правильный ответ сегодня состоит в том, чтобы просто заменить ваш DOCTYPE следующим:

<!doctype html>

Обратите внимание, что он больше не должен быть в верхнем регистре и не должен выглядеть как полное объявление SGML DOCTYPE. Это просто рудиментарный артефакт, идентифицирующий документ как соответствующий стандарту HTML.

5 голосов
/ 11 марта 2010
  1. Валидация - это еще не все, и все качество кодирования заканчивается.

  2. Некоторые вещи являются «стандартными» в браузерах, но не являются стандартом w3c.

  3. Использование JS немного излишне, когда функция уже существует.

3 голосов
/ 11 марта 2010

Если это просто одна или две ссылки, вы можете сделать это встроенным с

<a href="http://stackoverflow.com" onclick="window.open(this.href); return false;"></a>

Более того, и вы, вероятно, хотите одно из решений js выше.

2 голосов
/ 17 марта 2015

Вместо использования:

мишень = "_blank"

использование:

OnClick = "this.target = '_ пустой'"

Обратите внимание на одинарные кавычки внутри двойных кавычек. Это решило проблему проверки без необходимости переопределения типа документа.

1 голос
/ 05 августа 2011

Если у вас есть требования к доступности или межплатформенному взаимодействию, вы, вероятно, захотите проверить свою веб-страницу. Есть хороший документ, отвечающий на вопрос "зачем проверять?" опубликовано W3.org http://validator.w3.org/docs/why.html

ИМХО, это показывает, что вы заботитесь о своей аудитории, когда у вас есть дополнительное время для проверки. Затем у вас появятся страницы, которые практически одинаково отображаются в IE, Opera, Safari и Firefox.

1 голос
/ 21 октября 2010

На самом деле, предлагаемые здесь решения с добавлением атрибута target через JavaScript полностью соответствуют стандартам!

Дело в том, что согласно спецификации W3C DOM Level 1 интерфейс HTMLLinkElement ДОЛЖЕН иметь целевой атрибут, хотя элемент A из спецификации HTML 4.01 не имеет его.

То есть недопустимо записывать атрибут «target» в html-файл, но допустимо добавить его в дерево документа позже через интерфейсы DOM с использованием JS.

1 голос
/ 11 марта 2010
  1. Добавить rel="new-window" атрибут к ссылке (вместо target="_blank")
  2. добавить скрипт jquery в начало страницы и добавить следующий фрагмент

    <script type="text/javascript">
        $(document).ready(function(){
            $('a[rel="new-window"]').click(function(){
                window.open(this.href);
            })
        });
    </script>
    

(Обратите внимание, что, поскольку я набрал это в текстовом поле stackoverflow, я не проверял его.)

1 голос
/ 11 марта 2010

Вы не можете сделать это с помощью строгой проверки W3C.

Решения:

  • Переходный тип документа, как уже упоминалось

  • Другой валидатор (например, CSE )

  • Используйте JavaScript для замены "_blank" - см. http://www.ajaxblender.com/open-links-new-window-w3c-valid-target-blank.html (ссылка показывает, как сделать это аккуратно с помощью jQuery - я вставляю 2 приведенных ниже примера).

    $(document).ready(function(){
          $('A[rel="_blank"]').each(function() {
               $(this).attr('target', '_blank');
          });
     });
     // ...OR...
     $(document).ready(function(){
          $('A[rel="_blank"]').click(function() {
               window.open($(this).attr('href'));
               return false;
          });
     });
...