2010-11-26 22 views
5

Estoy usando Text::MultiMarkdown para crear archivos HTML a partir de documentos MultiMarkdown.¿Cómo puedo hacer que los hipervínculos se abran en una nueva pestaña usando CSS o Multimarkdown?

Me gustaría que se abran todos los enlaces en una nueva pestaña.

¿Hay alguna manera de configurar este comportamiento utilizando una plantilla CSS o directamente en el documento MultiMarkdown (sin escribir explícitamente HTML en cada enlace del documento MultiMarkdown)?

Respuesta

8

Definitivamente no en CSS: solo se trata de la forma en que aparecen los elementos, no cómo se comportan.

Debería ser posible agregar <base target="_blank"> al encabezado del documento HTML (usando XSLT), pero eso está a la par de agregarlo a cada enlace.

+1

@coding crow: "puedes hacer [obscure CSS hack], * pero no funcionará en ningún lado * (dentro del margen de error estadístico)"? Suena como "no se puede", es decir, mi afirmación es correcta y no necesita actualizaciones. – Piskvor

3

En HTML y/o JavaScript, solo puede inicializar la apertura de una ventana nueva. En su lugar, el usuario puede forzar la apertura de una nueva ventana como una nueva pestaña. Pero no puedes controlar este comportamiento.

+0

¡Bingo! El usuario tiene el control de si el documento se abre como una pestaña o una ventana separada. Creo que algunos navegadores incluso permiten reemplazar la ventana existente por la nueva a pesar de la configuración ''. –

0

No puede hacer esto en CSS pero puede usar la fuente.

Usted podría subclase Text::MultiMarkdown y proporciona su propia implementación de _GenerateAnchor, algo similar a esto podría funcionar:

sub _GenerateAnchor { 
    my ($self, $whole_match, $link_text, $link_id, $url, $title, $attributes) = @_; 
    if($url 
    && index($url, '#') != 0) { 
     $attributes = $attributes ? $attributes . ' target="_blank"' : 'target="_blank"'; 
    } 
    return $self->SUPER::_GenerateAnchor($whole_match, $link_text, $link_id, $url, $title, $attributes); 
} 

Esto es un poco como kludgey _GenerateAnchor no es parte de la interfaz pública. También necesitaría usar la interfaz OO en lugar de solo la función markdown.

También puede contactar al autor Text::MultiMarkdown y ver si agrega una bandera para este tipo de cosas. Tal vez podría proporcionar un parche para comenzar.

También puede usar HTML::Parser y sus amigos para analizar el código HTML que sale de Text::MultiMarkdown y agregar los atributos target usted mismo.

2

En teoría, puede hacer esto con CSS3: http://www.w3.org/TR/css3-hyperlinks/ - sin embargo, ningún navegador común lo ha implementado. La razón podría ser que es una creencia común que la elección de cuándo se abre una nueva ventana o pestaña debe dejarse solo al usuario.

Cuestiones relacionadas