我可以在Markdown中创建带有'target ="_ blank"'的链接吗?

ma1*_*w28 400 html markdown hyperlink target new-window

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

Mat*_*chu 322

就Markdown语法而言,如果你想要详细说明,你只需要使用HTML.

<a href="http://example.com/" target="_blank">Hello, world!</a>
Run Code Online (Sandbox Code Playgroud)

我见过的大多数Markdown引擎都允许使用普通的旧HTML,只是在这种情况下,通用文本标记系统不会削减它.(例如,StackOverflow引擎.)然后,他们通过HTML白名单过滤器运行整个输出,因为即使仅Markdown文档也可以轻松包含XSS攻击.因此,如果您或您的用户想要创建_blank链接,那么他们可能仍然可以.

如果这是您经常使用的功能,那么创建自己的语法可能是有意义的,但它通常不是一个重要的功能.如果我想在新窗口中启动该链接,我将自己点击它,谢谢.

  • 雅知道什么?我同意你和[alex](http://stackoverflow.com/questions/4425198/markdown-target-blank/4425214#4425214).我决定不使用`_blank`.将内容保存在一个浏览器中是一种更好的用户体验.他们可以像你说的那样回击或命令点击(Mac用户:)). (18认同)
  • 将内容保留在一个浏览器中实际上并不总是更好的用户体验...如果他们处于 SPA 中的注册或结帐流程,并且在最后一步他们需要同意外部中的某些条件,该怎么办?页?除非您使用模式,否则在新窗口中打开确实比用户完全失去上下文并不得不再次经历整个过程更可取。 (5认同)
  • 我在页面上运行了 javascript,将 _blank 添加到我域外的所有链接。就像@alex 在下一个答案中所说的那样 (2认同)
  • 我建议(希望显式和内联可读)以下语法:`[访问此页](http ::/link.com(`以获得*开放*的想法. (2认同)
  • 简单的目标="_ blank"可能很危险!在标签中添加rel ="noopener"!(https://sites.google.com/site/bughunteruniversity/nonvul​​n/phishing-with-window-opener) (2认同)

far*_*noy 314

Kramdown支持它.它与标准Markdown语法兼容,但也有许多扩展.你会像这样使用它:

[link](url){:target="_blank"}
Run Code Online (Sandbox Code Playgroud)

  • 与杰基尔合作很棒! (39认同)
  • 这似乎无法在Mac上使用Markdown引擎:-( (6认同)
  • 没用 它只是将{:target =“ _ blank”}呈现为文本。 (5认同)
  • 在jekyll中有一种方法可以将其设置为默认值吗?我希望我的博文中的所有链接都以`target ="_ blank"`打开 (3认同)
  • [kramdown](http://kramdown.gettalong.org/) 语法:[链接名称](url_link){:target="_blank"} 可以使用 kramdown 在线编辑器解析为 HTML:[http://trykramdown .herokuapp.com/](http://trykramdown.herokuapp.com/) 我使用它是因为我已经有相当多的 kramdown 引用,并且想避免重新输入它们。 (2认同)

ale*_*lex 106

我不认为有降价功能.

如果您想要使用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';
   } 
}
Run Code Online (Sandbox Code Playgroud)

jsFiddle.

如果你使用的是jQuery,那就简单了......

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

jsFiddle.

  • 我认为Jakob Nielson的引用不再适用于此.他抱怨打开新窗口,但现在target ="_ blank"会在新选项卡中打开.当其他域的链接无法在新标签页中打开时,我个人不喜欢它. (12认同)
  • 另外:因为说'雅各布尼尔森说你不应该这样做'是一个可怕的论点. (3认同)
  • 我发现我强迫人们进入一个新窗口的唯一一次是当我在一个连接外部的句子的中途,我希望在不中断流程的情况下提供我的评论来源.这个js片段是*理想*的目的 - 谢谢,upvoted :) (2认同)
  • 我要在这里补充一点,这也是最好的全球解决方案。它让你的 Markdown 保持干净,这就是 Markdown 的重点。 (2认同)

med*_*igo 45

使用Markdown-2.5.2,您可以使用:

[link](url){:target="_blank"}
Run Code Online (Sandbox Code Playgroud)

  • 似乎也没有在github markdown上工作 (8认同)
  • 与Jekyll v2.4.0一起使用(也可以与早期版本一起使用) (5认同)
  • 这是kramdown(因为Jekyll使用kramdown,它适用于Jekyll). (4认同)
  • 我尝试过这个并不适合我.使用django 1.6 (2认同)
  • 似乎无法在 GitLab 中使用此语法。我不确定当前使用的是哪个版本的 Markdown。 (2认同)

MrP*_*blo 6

您可以通过本机javascript代码执行此操作,如下所示:

 
var pattern = /a href=/g;
var sanitizedMarkDownText = rawMarkDownText.replace(pattern,"a target='_blank' href=");
Run Code Online (Sandbox Code Playgroud)

JSFiddle代码


小智 6

在我的项目中我正在做这个并且它工作正常:

[Link](https://example.org/ "title" target="_blank")
Run Code Online (Sandbox Code Playgroud)

链接

但并非所有解析器都允许您这样做.

  • 好好想一想.但是,如果您点击"链接",它会在同一个标​​签中打开.... (7认同)

guy*_*uya 6

对于鬼降价使用:

[Google](https://google.com" target="_blank)
Run Code Online (Sandbox Code Playgroud)

在这里找到它:https: //cmatskas.com/open-external-links-in-a-new-window-ghost/


小智 6

我正在使用Grav CMS,这非常有效:

车身/内容:
Some text[1]

车身/参考:
[1]: http://somelink.com/?target=_blank

只需确保首先传递target属性,如果链接中有其他属性,则将它们复制/粘贴到引用URL的末尾.

也可以作为直接链接:
[Go to this page](http://somelink.com/?target=_blank)

  • 作为参考,这里是[相关文档章节](https://learn.getgrav.org/content/linking#link-attributes)。 (2认同)

aho*_*lub 6

一个全局解决方案是放入<base target="_blank"> 页面的<head>元素.这有效地为每个锚元素添加了默认目标.我使用markdown在基于Wordpress的网站上创建内容,我的主题定制器将让我将代码注入每个页面的顶部.如果你的主题没有这样做,那就有一个插件


coa*_*ess 6

因此,不能将链接属性添加到Markdown URL并不是很正确。要添加属性,请检查所使用的基础markdown解析器及其扩展名。

尤其是pandoc具有enable的扩展名link_attributes,它允许在链接中进行标记。例如

[Hello, world!](http://example.com/){target="_blank"}
Run Code Online (Sandbox Code Playgroud)
  • 对于那些从未来[R (例如,使用rmarkdownbookdownblogdown等),这是你想要的语法。
  • 对于未使用R的用户,您可能需要在对with 的调用中启用扩展pandoc+link_attributes

注意:这与kramdown解析器的支持不同,后者是上面接受的答案之一。特别要注意的是,kramdown与pandoc有所不同,因为它需要一个冒号:--在大括号的开头- {}例如

[link](http://example.com){:hreflang="de"}
Run Code Online (Sandbox Code Playgroud)

特别是:

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

# Kramdown
{: attribute1="value1" attribute2="value2"}
 ^
 ^ Colon
Run Code Online (Sandbox Code Playgroud)


mid*_*dev 5

没有简单的方法可以做到这一点,就像@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>
Run Code Online (Sandbox Code Playgroud)

该代码与 IE8+ 兼容,您可以将其添加到页面底部。请注意,您需要将“.post-content a”更改为您用于帖子的类。

如下所示:http : //blog.hubii.com/target-_blank-for-links-on-ghost/


mou*_*ubi 5

不是直接的答案,但可能会帮助一些人到此为止。

如果您使用GatsbyJS,有一个插件可以自动添加target="_blank"Markdown中的外部链接。

它被称为gatsby-remark-external-links并且使用如下:

yarn add gatsby-remark-external-links

plugins: [      
  {
    resolve: `gatsby-transformer-remark`,
    options: {
      plugins: [{
        resolve: "gatsby-remark-external-links",
        options: {
          target: "_blank",
          rel: "noopener noreferrer"
        }
      }]
    }
  },
Run Code Online (Sandbox Code Playgroud)

它还负责rel="noopener noreferrer".

如果您需要更多选项,请参考文档。