XHTML Strict 1.0 - target=" blank" no es válido?


Acabo de validar mi documento XHTML Strict 1.0 real con el servicio de validación w3c.. y dice que

<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>

El target="_blank" no es válido.. pero necesito el blanco de destino para que se abra una nueva pestaña en el navegador, para que el usuario no abandone la página principal.

¿Qué puedo hacer? ¿Por qué esto no es válido?

Author: Maroun, 2011-01-12

8 answers

Es posible que desee revisar las Preguntas frecuentes del W3: http://www.w3.org/MarkUp/2004/xhtml-faq#target

¿Por qué se eliminó el atributo target de XHTML 1.1?

No lo era. XHTML 1.0 viene en tres versiones: strict, transitional y frameset. Los tres se mantuvieron deliberadamente lo más cerca posible de HTML 4.01 como XML lo permitiría. XHTML 1.1 es una versión actualizada de XHTML 1.0 strict, y ninguna versión de HTML strict ha incluido el atributo objetivo. Las otras dos versiones, transitional y frameset, no fueron actualizadas, porque no había nada que actualizar. Si desea utilizar el atributo target, utilice XHTML 1.0 transitional.

 15
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-07 00:30:52

La pregunta que debe hacerse no es cómo "eludir" la restricción de Strict, sino por qué desea usar XHTML Strict 1.0 en primer lugar.

En su caso, simplemente usaría Transitional como DTD. A menos que, por supuesto, esté desarrollando para un sistema operativo específico que, por ejemplo, no permita que se abran varias ventanas, por ejemplo, en sistemas de automóviles, un teléfono móvil o electrodomésticos más exóticos. Que es, por cierto, la razón por la que target está ausente en el estricto HTML.

Pero como parece que se desarrolla para el uso "normal", su tipo de documento debe reflejar eso y debe usar:

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

Véase también por qué se eliminó el objetivo de xhtml salud J

 9
Author: theking2,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-07 19:17:05

Sugiero no agregar el atributo de destino. Se eliminó debido a razones de accesibilidad, y no me gusta cuando la página decide para me cómo se abren las etiquetas de mi navegador. Por supuesto, usted es libre de hacerlo, si lo desea. Te mostraré un método JavaScript que Darin mencionó anteriormente que te permite validar como XHTML 1.0 Strict o XHTML 1.1:

Código 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>

Código 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';
    }
}

Por supuesto, puede omitir la ventana.onload si ya lo incluye en otro lugar, pero recomiendo usarlo (o usar otra función de carga, como $(document).ready(); de jQuery) para que el JavaScript se cargue cuando la página termine de cargarse. Ahora, todo lo que necesita hacer es darle a cada enlace de anclaje una clase de "targetblank", y los enlaces deben abrirse en una nueva pestaña.

 6
Author: mc10,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-29 22:15:03

Para esta situación utilizo una solución simple de jQuery que lo valida con XHTML Strict, y permite que aparezcan nuevas ventanas.

<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'));
    });
});
 3
Author: Kristian Williams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-10 07:56:17

Si bien no puedo decir por qué este atributo se considera inválido como una solución alternativa, podría agregar este atributo con javascript si desea que su sitio se valide como Estricto XHTML.

 1
Author: Darin Dimitrov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-12 08:12:03

Prueba esto:

<a href="#" onclick="window.open('urlgoeshere');">Link</a>
 0
Author: prplxr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-18 21:34:46

La mejor manera de usar target en XHTML STRICT es: onclick="target='_blank';"

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

Ejemplo: haga clic en el botón ESTRICTO en la parte inferior

Si necesitas _self o cualquier otro objetivo puedes cambiar el _blank a _self por ejemplo: onclick="target='_self';"

Espero que esta respuesta sea útil para algunos de ustedes...

 0
Author: jagb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-04 07:28:09

Prefiero esto

<a href="http://myurl.com" onclick="this.target='_blank'">Anchor text</a> 
 -1
Author: Timur Gafforov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-19 14:10:27