有没有办法在Markdown中创建一个在新窗口中打开的链接?如果不是,您建议使用什么语法来完成此操作?我将把它添加到我使用的markdown编译器中。我认为这应该是一个选择。


当前回答

我不认为停留在一个浏览器选项卡中会有更好的用户体验。如果你想让人们留在你的网站上,或者回来读完那篇文章,在一个新的标签中把他们发送出去。

在@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>

其他回答

你可以通过本地javascript代码这样做:

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

JSFiddle Code

就Markdown语法而言,如果想要获得如此详细的内容,就必须使用HTML。

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

我所见过的大多数Markdown引擎都允许普通的HTML,只是在这种情况下,一般的文本标记系统无法解决它。(例如StackOverflow引擎。)然后,他们通过HTML白名单过滤器运行整个输出,因为即使只有markdown的文档也很容易包含XSS攻击。因此,如果您或您的用户想要创建_blank链接,那么他们可能仍然可以。

如果这是一个您将经常使用的特性,那么创建自己的语法可能是有意义的,但它通常不是一个重要的特性。如果我想在一个新窗口中启动那个链接,我会自己按下ctrl键,谢谢。

我在尝试使用PHP实现markdown时遇到了这个问题。

由于用户生成的链接创建markdown需要在一个新的选项卡中打开,但网站链接需要留在选项卡中,我改变了markdown,只生成在一个新的选项卡中打开的链接。所以不是所有的链接在页面上链接,只是那些使用markdown。

在markdown我改变了所有的链接输出为<a target='_blank' href="…>,这很容易使用查找/替换。

完成alex回答(12月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?)组构造中添加更多扩展来更改regexp异常(请在这里了解这个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';
        } 
    }
}

您可以使用{[attr]="[prop]"}添加任何属性

例如[谷歌](http://www.google.com){target="_blank"}