有没有一种在Markdown中创建在新窗口打开链接的方法?如果没有,您推荐使用哪种语法来实现这一点?我会将其添加到我使用的Markdown编译器中。我认为这应该是一个选项。
有没有一种在Markdown中创建在新窗口打开链接的方法?如果没有,您推荐使用哪种语法来实现这一点?我会将其添加到我使用的Markdown编译器中。我认为这应该是一个选项。
var pattern = /a href=/g;
var sanitizedMarkDownText = rawMarkDownText.replace(pattern,"a target='_blank' href=");
没有简单的方法可以做到这一点,就像@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/
如果有人正在寻找一个涵盖全球的rmarkdown
(pandoc
) 解决方案。
您可以编写自己的Pandoc Lua Filter,它将target="_blank"
添加到所有链接中:
links.lua
function Link(element)
if
string.sub(element.target, 1, 1) ~= "#"
then
element.attributes.target = "_blank"
end
return element
end
_output.yml
bookdown::gitbook:
pandoc_args:
- --lua-filter=links.lua
<base target="_blank">
另一种解决方案是使用includes
选项,在HTML head
部分中注入<base target="_blank">
:
links.html
<base target="_blank">
_output.yml
bookdown::gitbook:
includes:
in_header: links.html
#
)指针/URL打开新标签页。我尚未测试此解决方案与此类URL的兼容性。$post->text= Str::replace('<a ', '<a target="_blank"', $post->text);
不仅适用于特定链接,还可以编辑Markdown文本中的所有链接。(在我的情况下这很好)
pip3 install mkdocs-open-in-new-tab
只需添加插件:
plugins:
- search
- open-in-new-tab
更多关于插件的信息。
对于已完成的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';
}
}
}
我不同意在一个浏览器标签页内停留会带来更好的用户体验。如果你想让人们留在你的网站上,或者回来继续阅读那篇文章,就把他们送到一个新的标签页。
在@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>
我在尝试使用PHP实现Markdown时遇到了这个问题。
由于使用Markdown生成的用户链接需要在新标签页中打开,而站点链接需要保留在当前标签页中,所以我将Markdown更改为仅生成在新标签页中打开的链接。因此,页面上并非所有的链接都是外部链接,只有使用Markdown的链接才是。
在Markdown中,我将所有的链接输出更改为<a target='_blank' href="...">
,这很容易通过查找/替换来实现。
https:
中删除s
就足以获得我想要的功能。 - Josh Gust