Могу ли я создать ссылки с 'target = "_ blank"' в Markdown? - PullRequest
365 голосов
/ 13 декабря 2010

Есть ли способ создать ссылку в Markdown, которая открывается в новом окне?Если нет, какой синтаксис вы рекомендуете сделать это.Я добавлю это в компилятор уценки, который я использую.Я думаю, что это должен быть вариант.

Ответы [ 17 ]

305 голосов
/ 13 декабря 2010

Что касается синтаксиса Markdown, если вы хотите получить более подробную информацию, вам просто нужно использовать HTML.

<a href="http://example.com/" target="_blank">Hello, world!</a>

Большинство механизмов Markdown, которые я видел, допускают простой старый HTML, просто для таких ситуаций, как эта, когда обычная система разметки текста просто не обрежет его. (Механизм StackOverflow, например.) Затем они пропускают весь вывод через фильтр белого списка HTML, независимо от того, что даже документ только для Markdown может легко содержать атаки XSS. Таким образом, если вы или ваши пользователи хотите создать _blank ссылки, то они, вероятно, все еще могут.

Если вы часто будете использовать эту функцию, возможно, имеет смысл создать собственный синтаксис, но обычно это не жизненно важная функция. Если я хочу запустить эту ссылку в новом окне, я сам щелкну по ней, удерживая клавишу Ctrl, спасибо.

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

Kramdown поддерживает это.Он совместим со стандартным синтаксисом Markdown, но также имеет много расширений.Вы бы использовали это так:

[link](url){:target="_blank"}
101 голосов
/ 13 декабря 2010

Я не думаю, что есть функция уценки.

Хотя возможны и другие варианты, если вы хотите открывать ссылки, которые автоматически указывают за пределы вашего собственного сайта с помощью 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 .

Если вы используете jQuery, это немного проще ...

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

jsFiddle .

43 голосов
/ 22 января 2015

С Markdown-2.5.2 вы можете использовать это:

[link](url){:target="_blank"}
6 голосов
/ 30 апреля 2017

Я использую Grav CMS, и это прекрасно работает:

Body / Content:Some text[1]

Кузов / Ссылка:[1]: http://somelink.com/?target=_blank

Просто убедитесь, что целевой атрибут передан первым, если в ссылке есть дополнительные атрибуты, скопируйте / вставьте их в конец ссылочного URL.

Также работает какпрямая ссылка:
[Go to this page](http://somelink.com/?target=_blank)

6 голосов
/ 27 января 2018

Одним из глобальных решений является добавление <base target="_blank"> в элемент <head> вашей страницы.Это эффективно добавляет цель по умолчанию к каждому элементу привязки.Я использую markdown для создания контента на своем веб-сайте на базе Wordpress, и мой настройщик тем позволит мне вставлять этот код в верхнюю часть каждой страницы.Если ваша тема этого не делает, есть плагин

6 голосов
/ 11 июня 2014

Вы можете сделать это с помощью собственного кода JavaScript следующим образом:


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

Код JSFiddle

6 голосов
/ 10 августа 2016

Для использования призрачной уценки:

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

Нашел здесь: https://cmatskas.com/open-external-links-in-a-new-window-ghost/

6 голосов
/ 22 июня 2015

В моем проекте я делаю это, и он отлично работает:

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

Ссылка

Но не все парсеры позволяют вам это делать.

4 голосов
/ 27 августа 2015

Нет простого способа сделать это, и, как @alex отметил, вам нужно будет использовать JavaScript.Его ответ - лучшее решение, но для его оптимизации вы можете захотеть отфильтровать только ссылки пост-контента.

<script>
    var links = document.querySelectorAll( '.post-content a' );  
    for (var i = 0, length = links.length; i < length; i++) {  
        if (links[i].hostname != window.location.hostname) {
            links[i].target = '_blank';
        }
    }
</script>

Код совместим с IE8 +, и вы можете добавить его внизтвоя страница.Обратите внимание, что вам нужно изменить ".post-content a" на класс, который вы используете для своих сообщений.

Как видно здесь: http://blog.hubii.com/target-_blank-for-links-on-ghost/

...