Manuel González Noriega escribió:
On Apr 12, 2005 10:33 AM, [EMAIL PROTECTED] <
[EMAIL PROTECTED]> wrote:
Hola:

Pasando validaciones a mi sitio web me salta que el atributo target de la
etiqueta 'a' no existe en XHTML 1.0 estricto.

Mi pregunta es entonces, cómo definir que el enlace se abra en una nueva
ventana o en la misma.

Soluciones por orden de deseabilidad:

1. Contribuye a una web mejor no abriendo links en una ventana nueva
2. Elige un doctype que se adapte a lo que quieras hacer, no al reves. Si necesitas target y no lo hay en Strict, cambia a Transitional
3. Utiliza un DTD propio que permita target (
http://www.alistapart.com/articles/customdtd/)
4. Utiliza un rel específico en los enlaces + javascript para añadir el comportamiento. (http://www.sitepoint.com/article/standards-compliant-world)

Aporto mi propia versión del punto 4.

Ya que estamos utilizando JavaScript, podemos ahorrarnos el marcado de los enlaces externos con `rel` e identificarlos mediante expresiones regulares.

Esta es mi sugerencia:

var targetExternal = function(e) {
        if (!document.getElementsByTagName) {
                // no hacemos nada en navegadores obsoletos
                return false;
        }
        var currentHost = document.location.hostname;
        var links = document.getElementsByTagName('a');
        var re = new RegExp('^http(s)?://' + currentHost);
        for (var i = 0; i < links.length; i++) {
                if (links[i].href.match(re)) { // el enlace apunta al
                                               // mismo servidor
                        // descomentar la siguiente línea
                        // en caso de duda
                        // alert(links[i].href + ' ' + 'SI');
                } else {
                        // ver comentario anterior
                        // alert(links[i].href + ' ' + 'NO');
                        links[i].target = '_blank';
                }
        }
}

// si tenemos más manejadores de eventos para window.onload
// añadir el evento como se muestra en
// http://www.scottandrew.com/weblog/articles/cbs-events
// en caso contrario, esto bastará:
window.onload = targetExternal;

Todo este código podría ir en un fichero externo que se cargaría mediante `<script type="text/javascript" src="dondesea.js"></script>`.

Y ya de paso, podríamos combinar el script con un checkbox para permitir que el usuario decida.

Agradecería vuestros comentarios, pues se me está ocurriendo convertir este mail en el post de hoy para mi gües[1].

Salud,
Choan

PS: Manuel, estoy contigo, IE es el único navegador decente XD
--
Dizque. Cosas que me van y me vienen
[1] http://dizque.lacalabaza.net/

Mundo Du. Cuentos breves, relatos sorprendentes
http://du.lacalabaza.net/
--
I don't need any of that SQL stuff -- I just want a database!

_______________________________________________
Lista de distribución Ovillo
Para escribir a la lista, envia un correo a Ovillo@lists.ovillo.org
Puedes modificar tus datos o desuscribirte en la siguiente dirección: 
http://ovillo.org/mailman/listinfo/ovillo

Responder a