新しいウィンドウで開くMarkdownでリンクを作成する方法はありますか?そうでない場合、これを行うためにどの構文をお勧めしますか?使用しているマークダウンコンパイラに追加します。私はそれがオプションであるべきだと思います。
20 に答える
Markdown構文に関する限り、それを詳細に知りたい場合は、HTMLを使用する必要があります。
<a href="http://example.com/" target="_blank">Hello, world!</a>
私が見たほとんどのMarkdownエンジンは、一般的なテキストマークアップシステムがそれをカットしないこのような状況のためだけに、プレーンな古いHTMLを許可します。(たとえば、StackOverflowエンジン。)次に、MarkdownのみのドキュメントでもXSS攻撃を簡単に含めることができるため、出力全体をHTMLホワイトリストフィルターを介して実行します。そのため、あなたまたはあなたのユーザーが_blank
リンクを作成したい場合でも、おそらくそれでも可能です。
これが頻繁に使用する機能である場合は、独自の構文を作成することは理にかなっているかもしれませんが、通常、重要な機能ではありません。そのリンクを新しいウィンドウで起動したい場合は、自分でCtrlキーを押しながらクリックします。ありがとうございます。
Kramdownはそれをサポートしています。標準のMarkdown構文と互換性がありますが、多くの拡張機能もあります。次のように使用します。
[link](url){:target="_blank"}
マークダウン機能はないと思いますが、JavaScriptを使用して自分のサイトの外部を指すリンクを自動的に開きたい場合は、他のオプションを利用できる可能性があります。
Array.from(javascript.links)
.filter(link => link.hostname != window.location.hostname)
.forEach(link => link.target = '_blank');
jQueryを使用している場合:
$(document.links).filter(function() {
return this.hostname != window.location.hostname;
}).attr('target', '_blank');
Markdown v2.5.2では、これを使用できます。
[link](URL){:target="_blank"}
したがって、マークダウンURLにリンク属性を追加できないというのは真実ではありません。属性を追加するには、使用されている基になるマークダウンパーサーとその拡張機能を確認してください。
特に、pandoc
を有効にする拡張機能がありlink_attributes
、リンクでのマークアップを許可します。例えば
[Hello, world!](http://example.com/){target="_blank"}
- Rから来るもの(たとえば、、などを使用
rmarkdown
する)の場合bookdown
、blogdown
これは必要な構文です。 - Rを使用していない場合は、 withの呼び出しで拡張機能を有効にする必要があります。
pandoc
+link_attributes
注:これは、kramdown
上記で受け入れられた回答の1つであるパーサーのサポートとは異なります。:
特に、kramdownは、中括弧の先頭にコロンが必要であるため{}
、pandocとは異なることに注意してください。
[link](http://example.com){:hreflang="de"}
特に:
# Pandoc
{ attribute1="value1" attribute2="value2"}
# Kramdown
{: attribute1="value1" attribute2="value2"}
^
^ Colon
1つのグローバルな解決策は<base target="_blank">
、ページの<head>
要素に配置することです。これにより、すべてのアンカー要素にデフォルトのターゲットが効果的に追加されます。マークダウンを使用してWordpressベースのWebサイトにコンテンツを作成します。テーマカスタマイザーを使用すると、そのコードをすべてのページの上部に挿入できます。テーマでそれができない場合は、プラグインがあります
ゴーストマークダウンの使用:
[Google](https://google.com" target="_blank)
ここで見つけました: https ://cmatskas.com/open-external-links-in-a-new-window-ghost/
私はGravCMSを使用していますが、これは完全に機能します。
本文/内容:
Some text[1]
本文/参照:
[1]: http://somelink.com/?target=_blank
ターゲット属性が最初に渡されることを確認してください。リンクに追加の属性がある場合は、それらをコピーして参照URLの最後に貼り付けてください。
直接リンクとしても機能します。
[Go to this page](http://somelink.com/?target=_blank)
これは、次のようなネイティブJavaScriptコードを介して行うことができます。
var pattern = /a href=/g;
var sanitizedMarkDownText = rawMarkDownText.replace(pattern,"a target='_blank' href=");
私のプロジェクトではこれを行っていますが、正常に機能します。
[Link](https://example.org/ "title" target="_blank")
しかし、すべてのパーサーがそれを許可しているわけではありません。
それを行う簡単な方法はありません。@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-contenta」を、投稿に使用しているクラスに変更する必要があることに注意してください。
ここに見られるように:http://blog.hubii.com/target-_blank-for-links-on-ghost/
直接的な答えではありませんが、ここにたどり着く人を助けるかもしれません。
GatsbyJSを使用している場合は、マークダウンのtarget="_blank"
外部リンクに自動的に追加するプラグインがあります。
これは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"
}
}]
}
},
また、の世話をしrel="noopener noreferrer"
ます。
さらにオプションが必要な場合は、ドキュメントを参照してください。
PHPを使用してマークダウンを実装しようとしたときに、この問題が発生しました。
マークダウンで作成されたユーザー生成リンクは新しいタブで開く必要がありますが、サイトリンクはタブにとどまる必要があるため、新しいタブで開くリンクのみを生成するようにマークダウンを変更しました。したがって、ページ上のすべてのリンクがリンクアウトするわけではなく、マークダウンを使用するリンクだけです。
マークダウンでは、すべてのリンク出力を、<a target='_blank' href="...">
検索/置換を使用して十分に簡単なものに変更しました。
1つのブラウザタブ内にとどまる方がユーザーエクスペリエンスが優れていることに同意しません。人々にあなたのサイトにとどまってもらいたい場合、またはその記事を読み終えるために戻ってきてほしい場合は、新しいタブで彼らを送り出してください。
@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>
GNU sed&makeを使用して、外部リンクに対してのみ自動化
すべての外部リンクに対してこれを体系的に実行したい場合、CSSはオプションではありません。ただし、sed
Markdownから(X)HTMLが作成されたら、次のコマンドを実行できます。
sed -i 's|href="http|target="_blank" href="http|g' index.html
上記のsed
コマンドをに追加することで、これをさらに自動化できますmakefile
。詳細については、GNUを参照するmake
か、Webサイトでそれをどのように行ったかを確認してください。
{[attr] = "[prop]"}を使用して、任意の属性を追加できます
例:[Google](http://www.google.com){target = "_ blank"}
完了したアレックスの回答(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';
}
}
}
特定のリンクでこれを実行したい場合は、他の人が回答したようにインライン属性リスト構文を使用するか、HTMLを使用してください。
生成されたすべてのタグでこれを実行したい場合は<a>
、Markdownコンパイラによって異なりますが、拡張機能が必要な場合があります。
私は最近、pelican
を使用するによって生成される私のブログのためにこれを行っていますPython-Markdown
。そして、Python-Markdown
Phuker / markdown_link_attr_modifierの拡張機能を見つけました、それはうまく機能します。と呼ばれる古い拡張機能newtab
はPython-Markdown3.xでは機能しないようです。
誰かがグローバルrmarkdown
(pandoc
)ソリューションを探している場合。
PandocLuaフィルターの使用
すべてのリンクに追加する独自のPandocLuaフィルターを作成できます。target="_blank"
- Pandoc Lua Filterを作成し、たとえば名前を付けます
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">
に挿入
別の解決策は、オプションを使用<base target="_blank">
してHTMLhead
セクションに挿入することです。includes
- 新しいHTMLファイルを作成し、たとえば名前を付けます
links.html
<base target="_blank">
- 次に、
_output.yml
bookdown::gitbook:
includes:
in_header: links.html
注:このソリューションでは、ハッシュ(#
)ポインター/URLの新しいタブが開く場合もあります。私はそのようなURLでこのソリューションをテストしていません。
これは私のために働きます:[ページリンク](ここにあなたのURL "(target | _blank)")