Создайте проверенную ссылку W3C привязки с целью = “_blank”

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

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

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

9
задан random 2 July 2011 в 17:48
поделиться

7 ответов

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

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

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

Вот как:

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

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

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

<!doctype html>

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

5
ответ дан 4 December 2019 в 06:56
поделиться

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

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

Более того, и вам, вероятно, понадобится одно из указанных выше js-решений.

3
ответ дан 4 December 2019 в 06:56
поделиться

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

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

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

6
ответ дан 4 December 2019 в 06:56
поделиться

Используйте этот doctype:

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

1.0 transitional вмещает некоторый "устаревший" код html, включая target = "_ blank".

9
ответ дан 4 December 2019 в 06:56
поделиться
  1. Добавить атрибут rel = "new-window" к ссылке (вместо target = "_ blank" )
  2. добавьте скрипт jquery в начало страницы и добавьте следующий фрагмент

      
     

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

1
ответ дан 4 December 2019 в 06:56
поделиться
  1. Проверка - это еще не все, что нужно для качества кодирования.

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

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

5
ответ дан 4 December 2019 в 06:56
поделиться

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

Решения:

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

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

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

    $(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;
          });
     });
1
ответ дан 4 December 2019 в 06:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: