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

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

Ответы [ 17 ]

3 голосов
/ 24 мая 2018

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

В частности, pandoc имеет расширение для включения link_attributes, которое разрешает разметку в ссылке.например,

[Hello, world!](http://example.com/){target="_blank"}
  • Для тех, кто прибывает из R (например, используя rmarkdown, bookdown, blogdown и т. д.), этот синтаксис вам нужен.
  • Для тех, кто не использует R , вам может понадобиться включить добавочный номер при вызове на pandoc с +link_attributes

Примечание: Это отличается от поддержки парсера kramdown, которая является одним из принятых ответов выше.В частности, обратите внимание, что kramdown отличается от pandoc, поскольку для него требуется двоеточие - : - в начале фигурных скобок - {}, например,

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

В частности:

# Pandoc
{ attribute1="value1" attribute2="value2"}

# Kramdown
{: attribute1="value1" attribute2="value2"}
 ^
 ^ Colon
0 голосов
/ 23 октября 2018

Это работает для меня: [Page Link] (ваш URL здесь "(target | _blank)")

0 голосов
/ 04 февраля 2015

За выполненный ответ Алекс (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');

Вы можете изменить исключения регулярного выражения, добавив дополнительное расширение в (?!html?|php3?|aspx?) групповую конструкцию (здесь это регулярное выражение понимается: 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';
        } 
    }
}
0 голосов
/ 07 января 2014

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

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

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

0 голосов
/ 14 октября 2014

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

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

0 голосов
/ 10 июня 2014

Автоматизировано только для внешних ссылок, с использованием GNU sed & make

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

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

Это может быть дополнительно автоматизировано путем добавления вышеуказанной команды sedдо makefile.Подробности см. В GNU make или . Посмотрите, как я это сделал на моем веб-сайте .

0 голосов
/ 21 февраля 2014

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

Опираясь на ответ @ 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>
...