我可以在Markdown中创build“target =”_ blank“”的链接吗?

有没有办法在Markdown中创build一个在新窗口中打开的链接? 如果没有,你推荐什么语法来做到这一点。 我将它添加到我使用的markdown编译器。 我认为这应该是一个select。

就Markdown语法而言,如果你想得到详细的信息,你只需要使用HTML。

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

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

如果这是您经常使用的function,那么创build自己的语法可能是有意义的,但这通常不是一个重要的function。 如果我想在新窗口中启动该链接,我将按住Ctrl键单击它,谢谢。

Kramdown支持它。 它兼容标准的Markdown语法,但也有很多扩展。 你会这样使用它:

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

我不认为有降价function。

尽pipe如果你想用JavaScript自动打开指向你自己网站的链接,也可能有其他的select。

 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 。

使用Markdown-2.5.2,你可以使用这个:

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

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

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

链接

但并不是所有的parsing器都能让你做到这一点。

对于鬼降价使用:

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

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

你可以通过原生javascript代码来做到这一点:

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

JSFiddle代码

没有简单的方法,像@alex注意到你需要使用JavaScript。 他的答案是最好的解决scheme,但为了优化它,您可能只想过滤后内容链接。

 <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”更改为您在post中使用的类。

如在这里看到的: http : //blog.hubii.com/target-_blank-for-links-on-ghost/

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

例如[Google]( http://www.google.com ){target =“_ blank”}

我正在使用Grav CMS,这完美的作品:

车身/内容:
Some text[1]

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

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

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

由于使用markdown创build的用户链接需要在新标签中打开,但是站点链接需要保留在标签页中,我将标记更改为仅生成在新标签中打开的链接。 所以并不是页面上的所有链接都链接出来,只是使用了markdown的链接。

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

我不认为保持在一个浏览器标签中是一个更好的用户体验。 如果您希望人们留在您的网站上,或者回过头来阅读该文章,请将其发送到新标签中。

build立在@ davidmorrow的答案,把这个JavaScript到您的网站,并把外部链接变成链接与目标= _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> 

如果有人想为所有的外部链接系统地做这件事情, CSS是没有select的 。 但是,一旦从Markdown创build了(X)HTML,就可以运行下面的sed命令:

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

对于完成亚历克斯回答(Dec 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?)([az]{0,3}|[a-zt]{0,4})$/.test(this.pathname); /* * For all link kept, add the `target="_blank"` attribute. */ }).attr('target', '_blank'); 

您可以通过在(?!html?|php3?|aspx?)组构造中添加更多扩展来更改正则expression式exception(请在此处理解此正则expression式: 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?)([az]{0,3}|[a-zt]{0,4})$/.test(links[i].pathname) ) { links[i].target = '_blank'; } } }