XHTML Strict 1.0 - target = "_ blank" недопустимо? - PullRequest
24 голосов
/ 12 января 2011

Я только что проверил свой фактический документ XHTML Strict 1.0 с помощью службы валидатора w3c .. и он говорит, что

<ul id="socialnetwork">
            <li><a href="http://www.twitter.com" target="_blank"></a></li>
            <li><a href="http://www.flickr.com" target="_blank"></a></li>
            <li><a href="http://www.xing.com" target="_blank"></a></li>
            <li><a href="http://www.rss.com" target="_blank"></a></li>
</ul>

target = "_ blank" недействителен ... но мне нужен целевой пробелпоэтому в браузере откроется новая вкладка, чтобы пользователь не покинул главную страницу.

Что я могу сделать?Почему это недействительно?

Ответы [ 8 ]

16 голосов
/ 12 января 2011

Вы можете проверить часто задаваемые вопросы W3: http://www.w3.org/MarkUp/2004/xhtml-faq#target

Почему целевой атрибут был удален из XHTML 1.1?

Не было. XHTML 1.0 выпускается в трех версиях: строгой, переходной и frameset. Все три из них были намеренно максимально приближены к HTML 4.01, насколько позволяет XML. XHTML 1.1 является обновленной версией строгого XHTML 1.0, и ни одна версия строгого HTML никогда не включала целевой атрибут. Две другие версии, transitional и frameset, не были обновлены, потому что обновлять было нечего. Если вы хотите использовать целевой атрибут, используйте XHTML 1.0 transitional.

9 голосов
/ 09 марта 2013

Вопрос, который вы должны задать себе, заключается не в том, как «обойти» ограничения Strict, а в том, почему вы хотите использовать XHTML Strict 1.0.

В вашем случае я бы просто использовал Transitional в качестве DTD.Если, конечно, вы не разрабатываете для конкретной операционной системы, которая, например, не позволяет открывать несколько окон, например, в автомобильных системах, мобильных телефонах или более экзотических приборах.Что, кстати, причина, по которой цель отсутствует в HTML Strict.

Но, как вы, похоже, разрабатываете для "нормального" использования, ваш тип документа должен отражать это, и вы должны использовать:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

См. Также почему цель удалена из xhtml ура J

7 голосов
/ 13 января 2011

Я предлагаю , а не добавление в целевой атрибут. Он был удален по причинам доступности, и мне не нравится, когда страница определяет для me , как открываются теги моего браузера. Конечно, вы можете сделать это, если хотите. Я покажу вам метод JavaScript, который Дарин упомянул выше, который позволяет вам проверять как XHTML 1.0 Strict или XHTML 1.1:

HTML код:

<!-- Added link titles for better testing purposes -->
<ul id="socialnetwork">
    <li><a href="http://www.twitter.com/" class="targetblank">Twitter</a></li>
    <li><a href="http://www.flickr.com/" class="targetblank">Flickr</a></li>
    <li><a href="http://www.xing.com/" class="targetblank">XING</a></li>
    <li><a href="http://www.rss.com/" class="targetblank">RSS</a></li>
</ul>

Код JavaScript:

window.onload = function() {
    // Code if document.getElementByClassName() doesn't exist
    if (document.getElementsByClassName == undefined) {
        document.getElementsByClassName = function(className) {
            var hasClassName = new RegExp("(?:^|\\s)" + className + "(?:$|\\s)");
            var allElements = document.getElementsByTagName("*");
            var results = [];

            var element;
            for (var i = 0; (element = allElements[i]) != null; i++) {
                var elementClass = element.className;
                if (elementClass && elementClass.indexOf(className) != -1 && hasClassName.test(elementClass))
                    results.push(element);
            }

            return results;
        }
    }

    var anchorList = document.getElementsByClassName('targetblank');
    for (var i in anchorList) {
        anchorList[i].target = '_blank';
    }
}

Конечно, вы можете опустить window.onload, если вы уже включили его в другом месте, но я рекомендую использовать его (или использовать другую функцию загрузки, такую ​​как $(document).ready(); JQuery), чтобы JavaScript загружался после завершения загрузки страницы. Теперь все, что вам нужно сделать, это присвоить каждой якорной ссылке класс "targetblank", и ссылки должны открыться в новой вкладке.

3 голосов
/ 10 июля 2012

В этой ситуации я использую простое решение jQuery, которое проверяет его с помощью XHTML Strict и позволяет появляться новым окнам.

<a href="http://www.example.com" class="linkExternal">Example URL</a>

<script type="text/javascript">
$(function(){
    $('a.linkExternal').on('click',function(e){
        e.preventDefault();
        window.open($(this).attr('href'));
    });
});
1 голос
/ 12 января 2011

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

0 голосов
/ 04 сентября 2014

Лучший способ использовать цель в XHTML STRICT: onclick="target='_blank';"

<a href="http://botje.tnhteam.com/" onclick="target='_blank';">Botje is overal</a>

Пример: нажмите кнопку STRICT внизу

, если вам нужно_self или любая другая цель, вы можете изменить _blank на _self, например: onclick="target='_self';"

Я надеюсь, что этот ответ будет полезен для некоторых из вас ...

0 голосов
/ 19 сентября 2013

Я предпочитаю это

<a href="http://myurl.com" onclick="this.target='_blank'">Anchor text</a> 
0 голосов
/ 19 октября 2012

Попробуйте это:

<a href="#" onclick="window.open('urlgoeshere');">Link</a>
...