¿Puedo crear enlaces con ‘target = “_ blank”‘ en Markdown?

¿Hay alguna manera de crear un enlace en Markdown que se abre en una nueva ventana? Si no, ¿qué syntax recomiendas para hacer esto? Lo agregaré al comstackdor de marcas que uso. Creo que debería ser una opción.

En lo que respecta a la syntax de Markdown, si desea obtener esa información detallada, solo tendrá que usar HTML.

Hello, world! 

La mayoría de los motores de Markdown que he visto permiten el uso de HTML simple, solo para situaciones como esta en las que un sistema genérico de marcado de texto simplemente no lo corta. (El motor de StackOverflow, por ejemplo). Luego ejecutan todo el resultado a través de un filtro de lista blanca HTML, independientemente, ya que incluso un documento de solo Markdown puede contener fácilmente ataques XSS. Como tal, si usted o sus usuarios desean crear vínculos _blank , entonces probablemente todavía puedan hacerlo.

Si esa es una función que va a utilizar a menudo, podría tener sentido crear su propia syntax, pero en general no es una función vital. Si quiero lanzar ese enlace en una nueva ventana, voy a presionar Ctrl-clic yo mismo, gracias.

Kramdown lo admite. Es compatible con la syntax estándar de Markdown, pero también tiene muchas extensiones. Lo usarías así:

 [link](url){:target="_blank"} 

No creo que haya una función de rebaja.

Aunque puede haber otras opciones disponibles si desea abrir enlaces que apuntan fuera de su propio sitio automáticamente con JavaScript.

 var links = document.links; for (var i = 0, linksLength = links.length; i < linksLength; i++) { if (links[i].hostname != window.location.hostname) { links[i].target = '_blank'; } } 

jsFiddle .

Si usas jQuery es un poco más simple https://stackoverflow.com/questions/4425198/can-i-create-links-with-target-blank-in-markdown/...

 $(document.links).filter(function() { return this.hostname != window.location.hostname; }).attr('target', '_blank'); 

jsFiddle .

Con Markdown-2.5.2, puedes usar esto:

 [link](url){:target="_blank"} 

En mi proyecto, estoy haciendo esto y funciona bien:

 [Link](https://example.org/ "title" target="_blank") 

Enlazar

Pero no todos los analizadores le permiten hacer eso.

Para el uso de rebajas de fantasmas:

 [Google](https://google.com" target="_blank) 

Lo encontré aquí: https://cmatskas.com/open-external-links-in-a-new-window-ghost/

Puede hacerlo a través del código JavaScript nativo, como sigue:

 var pattern = /a href=/g; var sanitizedMarkDownText = rawMarkDownText.replace(pattern,"a target='_blank' href="); 

Código JSFiddle

No hay una manera fácil de hacerlo, y como @alex ha notado que necesitarás usar JavaScript. Su respuesta es la mejor solución, pero para optimizarla, es posible que desee filtrar solo a los enlaces posteriores al contenido.

  

El código es compatible con IE8 + y puede agregarlo al pie de la página. Tenga en cuenta que deberá cambiar el ".post-content a" a la clase que está utilizando para sus publicaciones.

Como se ve aquí: http://blog.hubii.com/target-_blank-for-links-on-ghost/

Estoy usando Grav CMS y esto funciona perfectamente:

Cuerpo / Contenido:
Some text[1]

Cuerpo / Referencia:
[1]: http://somelink.com/?target=_blank

Solo asegúrese de que el atributo de destino se pase primero, si hay atributos adicionales en el enlace, cópielos y péguelos al final de la URL de referencia.

También funciona como enlace directo:
[Go to this page](http://somelink.com/?target=_blank)

Una solución global es poner en el elemento su página. Eso efectivamente agrega un objective predeterminado a cada elemento de anclaje. Uso markdown para crear contenido en mi sitio web basado en WordPress, y el personalizador de temas me permitirá insertar ese código en la parte superior de cada página. Si su tema no hace eso, hay un complemento

Por lo tanto, no es del todo cierto que no pueda agregar atributos de enlace a una URL de ajuste. Para agregar atributos, verifique con el analizador de rebajas subyacente que se utiliza y cuáles son sus extensiones.

En particular, pandoc tiene una extensión para habilitar link_attributes , que permite el marcado en el enlace. p.ej

 [Hello, world!](http://example.com/){target="_blank"} 
  • Para aquellos que provienen de R (por ejemplo, usando rmarkdown , rmarkdown , bookdown , etc.), esta es la syntax que desea.
  • Para aquellos que no usan R , es posible que deba habilitar la extensión en la llamada a pandoc con +link_attributes

Nota: Esto es diferente al kramdown analizador de kramdown , que es una de las respuestas aceptadas anteriormente. En particular, tenga en cuenta que kramdown difiere de pandoc ya que requiere un signo de dos puntos : al comienzo de las llaves – {} , por ej.

 [link](http://example.com){:hreflang="de"} 

En particular:

 # Pandoc { attribute1="value1" attribute2="value2"} # Kramdown {: attribute1="value1" attribute2="value2"} ^ ^ Colon 

Me encontré con este problema al tratar de implementar el descuento usando PHP.

Dado que los enlaces generados por el usuario creados con el descuento deben abrirse en una nueva pestaña, pero los enlaces del sitio deben permanecer en la pestaña Modifiqué el descuento para generar enlaces que se abren en una pestaña nueva. Por lo tanto, no todos los enlaces de la página se vinculan, solo los que usan el marcado.

En markdown, cambié todo el resultado del enlace para que fuera cual era bastante fácil usando find / replace.

No estoy de acuerdo con que sea una mejor experiencia de usuario permanecer dentro de una pestaña del navegador. Si desea que las personas permanezcan en su sitio, o regresen para terminar de leer ese artículo, envíelos en una nueva pestaña.

Basándote en la respuesta de @ davidmorrow, coloca este javascript en tu sitio y convierte los enlaces externos en enlaces con target = _blank:

   

Si uno quisiera hacer esto sistemáticamente para todos los enlaces externos, CSS no es una opción . Sin embargo, uno podría ejecutar el siguiente comando sed una vez que el (X) HTML se haya creado a partir de Markdown:

 sed -i 's|href="http|target="_blank" href="http|g' index.html 

Puedes agregar cualquier atributo usando {[attr] = “[prop]”}

Por ejemplo [Google] ( http://www.google.com ) {target = “_ blank”}

Por completo Alex respondió (13 de diciembre de 2010)

Un objective de inyección más inteligente podría hacerse con este código:

 /* * For all links in the current pagehttps://stackoverflow.com/questions/4425198/can-i-create-links-with-target-blank-in-markdown/... */ $(document.links).filter(function() { /* * https://stackoverflow.com/questions/4425198/can-i-create-links-with-target-blank-in-markdown/...keep them without `target` already settedhttps://stackoverflow.com/questions/4425198/can-i-create-links-with-target-blank-in-markdown/... */ return !this.target; }).filter(function() { /* * https://stackoverflow.com/questions/4425198/can-i-create-links-with-target-blank-in-markdown/...and keep them are not on current domainhttps://stackoverflow.com/questions/4425198/can-i-create-links-with-target-blank-in-markdown/... */ return this.hostname !== window.location.hostname || /* * http://sofes.miximages.com/html/...or are not a web file (.pdf, .jpg, .png, .js, .mp4, etc.). */ /\.(?!html?|php3?|aspx?)([az]{0,3}|[a-zt]{0,4})$/.test(this.pathname); /* * For all link kept, add the `target="_blank"` attribute. */ }).attr('target', '_blank'); 

Puede cambiar las excepciones de expresiones regulares agregando más extensiones en la construcción de grupos (?!html?|php3?|aspx?) (Comprenda esta expresión regular aquí: https://regex101.com/r/sE6gT9/3 ).

y para una versión sin jQuery, verifique el siguiente código:

 var links = document.links; for (var i = 0; i < links.length; i++) { if (!links[i].target) { if ( links[i].hostname !== window.location.hostname || /\.(?!html?)([az]{0,3}|[a-zt]{0,4})$/.test(links[i].pathname) ) { links[i].target = '_blank'; } } }