有没有一种方法可以在Markdown中创建一个在新窗口中打开的链接?如果没有,建议您使用哪种语法。我将其添加到我使用的markdown编译器中。我认为这应该是一个选择。
s
从中删除https:
足以获得我想要的功能。
有没有一种方法可以在Markdown中创建一个在新窗口中打开的链接?如果没有,建议您使用哪种语法。我将其添加到我使用的markdown编译器中。我认为这应该是一个选择。
s
从中删除https:
足以获得我想要的功能。
Answers:
就Markdown语法而言,如果要详细说明,则只需使用HTML。
<a href="http://example.com/" target="_blank">Hello, world!</a>
我见过的大多数Markdown引擎都允许使用普通的旧HTML,仅在这种情况下,即通用文本标记系统无法将其截断。(例如,StackOverflow引擎。)然后,无论如何,它们都将通过HTML白名单过滤器运行整个输出,因为即使是仅Markdown的文档也可以轻松地包含XSS攻击。这样,如果您或您的用户想要创建_blank
链接,那么他们可能仍然可以。
如果这是您将要经常使用的功能,则创建自己的语法可能很有意义,但是通常它并不是至关重要的功能。如果要在新窗口中启动该链接,请自己按住ctrl键单击它,谢谢。
_blank
。将内容保存在一个浏览器中是一种更好的用户体验。他们可以像您说的那样进行回击或单击命令(Mac用户在这里:)。
[Visit this page](http::/link.com(
获得的想法开幕。
Kramdown支持它。它与标准Markdown语法兼容,但也有许多扩展。您可以这样使用它:
[link](url){:target="_blank"}
target="_blank"
我认为没有降价功能。
但是,如果您想使用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';
}
}
如果您使用的是jQuery,则有点简单...
$(document.links).filter(function() {
return this.hostname != window.location.hostname;
}).attr('target', '_blank');
Jakob Nielsen says you shouldn't do that
是一个可怕的论点。
使用Markdown-2.5.2,您可以使用以下命令:
[link](url){:target="_blank"}
对于幽灵降价使用:
[Google](https://google.com" target="_blank)
在这里找到它:https : //cmatskas.com/open-external-links-in-a-new-window-ghost/
[open new window][1] \n [1]: (https://abc.xyz" target="_blank)
。也许我弄错了什么,或者这不是要那样工作吗?
因此,不能将链接属性添加到Markdown URL并不是很正确。要添加属性,请检查所使用的基础markdown解析器及其扩展名。
尤其是pandoc
具有enable的扩展名link_attributes
,它允许在链接中进行标记。例如
[Hello, world!](http://example.com/){target="_blank"}
rmarkdown
,bookdown
,blogdown
等),这是你想要的语法。pandoc
+link_attributes
注意:这与kramdown
解析器的支持不同,后者是上面接受的答案之一。特别要注意的是,kramdown与pandoc有所不同,因为它需要一个冒号:
--在大括号的开头- {}
例如
[link](http://example.com){:hreflang="de"}
特别是:
# Pandoc
{ attribute1="value1" attribute2="value2"}
# Kramdown
{: attribute1="value1" attribute2="value2"}
^
^ Colon
您可以通过本地javascript代码执行此操作,如下所示:
var pattern = /a href=/g;
var sanitizedMarkDownText = rawMarkDownText.replace(pattern,"a target='_blank' href=");
<a href="https://example.org/" rel="nofollow" title="title" target="_blank">Link</a>
没有简单的方法可以做到,就像@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/
我不同意留在一个浏览器选项卡中会带来更好的用户体验。如果您希望人们留在您的网站上,或者回来阅读完该文章,请在新标签中将其发送出去。
以@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>
您可以使用{[attr] =“ [prop]”}添加任何属性
例如[Google](http://www.google.com){target =“ _ blank”}
对于完整的Alex回答(2010年12月13日)
可以使用以下代码来实现更智能的注入目标:
/*
* 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';
}
}
}