Могу ли я создавать ссылки с "target =" _ blank "" в Markdown?

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

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

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

Ссылка

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

Ответ 7

Вы можете сделать это через собственный код javascript, например:

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

Код JSFiddle

Ответ 8

Нет простого способа сделать это, и, как @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/

Ответ 9

Вы можете добавить любые атрибуты, используя {[attr] = "[prop]" }

Например, [Google] (http://www.google.com) {target = "_ blank" }

Ответ 10

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

Body/Содержание:
Some text[1]

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

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

Ответ 11

Я столкнулся с этой проблемой при попытке реализовать уценку с помощью PHP.

Поскольку создаваемые пользователем ссылки, созданные с помощью уценки, должны открываться на новой вкладке, но ссылки на сайты должны оставаться на вкладке, я изменил уценку, чтобы генерировать только ссылки, открывающиеся на новой вкладке. Таким образом, не все ссылки на странице ссылаются, а только те, которые используют уценку.

В markdown я изменил весь вывод ссылки на <a target='_blank' href="...">, который был достаточно легким, используя find/replace.

Ответ 12

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

Основываясь на ответе @davidmorrow, бросьте этот javascript на свой сайт и превратите только внешние ссылки в ссылки с target = _blank:

    <script type="text/javascript" charset="utf-8">
      // Creating custom :external selector
      $.expr[':'].external = function(obj){
          return !obj.href.match(/^mailto\:/)
                  && (obj.hostname != location.hostname);
      };

      $(function(){
        // Add 'external' CSS class to all external links
        $('a:external').addClass('external');

        // turn target into target=_blank for elements w external class
        $(".external").attr('target','_blank');

      })

    </script>

Ответ 13

Если вы хотите сделать это систематически для всех внешних ссылок, CSS не вариант. Тем не менее, можно выполнить следующую команду sed после создания (X) HTML из Markdown:

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

Ответ 14

За завершенный alex ответил (13 декабря 10)

С помощью этого кода можно сделать более интеллектуальную цель для инъекций:

/*
 * For all links in the current page...
 */
$(document.links).filter(function() {
    /*
     * ...keep them without `target` already setted...
     */
    return !this.target;
}).filter(function() {
    /*
     * ...and keep them are not on current domain...
     */
    return this.hostname !== window.location.hostname ||
        /*
         * ...or are not a web file (.pdf, .jpg, .png, .js, .mp4, etc.).
         */
        /\.(?!html?|php3?|aspx?)([a-z]{0,3}|[a-zt]{0,4})$/.test(this.pathname);
/*
 * For all link kept, add the `target="_blank"` attribute. 
 */
}).attr('target', '_blank');

Вы можете изменить исключения regexp с добавлением большего количества расширений в конструкцию группы (?!html?|php3?|aspx?) (понимайте это regexp здесь: https://regex101.com/r/sE6gT9/3).

и для версии без jQuery проверьте код ниже:

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