648

新しいウィンドウで開くMarkdownでリンクを作成する方法はありますか?そうでない場合、これを行うためにどの構文をお勧めしますか?使用しているマークダウンコンパイラに追加します。私はそれがオプションであるべきだと思います。

4

20 に答える 20

496

Markdown構文に関する限り、それを詳細に知りたい場合は、HTMLを使用する必要があります。

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

私が見たほとんどのMarkdownエンジンは、一般的なテキストマークアップシステムがそれをカットしないこのような状況のためだけに、プレーンな古いHTMLを許可します。(たとえば、StackOverflowエンジン。)次に、MarkdownのみのドキュメントでもXSS攻撃を簡単に含めることができるため、出力全体をHTMLホワイトリストフィルターを介して実行します。そのため、あなたまたはあなたのユーザーが_blankリンクを作成したい場合でも、おそらくそれでも可能です。

これが頻繁に使用する機能である場合は、独自の構文を作成することは理にかなっているかもしれませんが、通常、重要な機能ではありません。そのリンクを新しいウィンドウで起動したい場合は、自分でCtrlキーを押しながらクリックします。ありがとうございます。

于 2010-12-13T01:40:35.647 に答える
441

Kramdownはそれをサポートしています。標準のMarkdown構文と互換性がありますが、多くの拡張機能もあります。次のように使用します。

[link](url){:target="_blank"}
于 2011-01-16T13:40:29.437 に答える
120

マークダウン機能はないと思いますが、JavaScriptを使用して自分のサイトの外部を指すリンクを自動的に開きたい場合は、他のオプションを利用できる可能性があります。

Array.from(javascript.links)
    .filter(link => link.hostname != window.location.hostname)
    .forEach(link => link.target = '_blank');

jsFiddle

jQueryを使用している場合:

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

jsFiddle

于 2010-12-13T01:37:47.760 に答える
65

Markdown v2.5.2では、これを使用できます。

[link](URL){:target="_blank"}
于 2015-01-22T12:54:12.123 に答える
17

したがって、マークダウンURLにリンク属性を追加できないというのは真実ではありません。属性を追加するには、使用されている基になるマークダウンパーサーとその拡張機能を確認してください。

特に、pandocを有効にする拡張機能がありlink_attributes、リンクでのマークアップを許可します。例えば

[Hello, world!](http://example.com/){target="_blank"}
  • Rから来るもの(たとえば、、などを使用rmarkdownする)の場合bookdownblogdownこれは必要な構文です。
  • 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
于 2018-05-24T01:50:32.460 に答える
14

1つのグローバルな解決策は<base target="_blank"> 、ページの<head>要素に配置することです。これにより、すべてのアンカー要素にデフォルトのターゲットが効果的に追加されます。マークダウンを使用してWordpressベースのWebサイトにコンテンツを作成します。テーマカスタマイザーを使用すると、そのコードをすべてのページの上部に挿入できます。テーマでそれができない場合は、プラグインがあります

于 2018-01-26T21:14:34.417 に答える
9

ゴーストマークダウンの使用:

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

ここで見つけました: https ://cmatskas.com/open-external-links-in-a-new-window-ghost/

于 2016-08-10T01:24:41.190 に答える
9

私はGravCMSを使用していますが、これは完全に機能します。

本文/内容:
Some text[1]

本文/参照:
[1]: http://somelink.com/?target=_blank

ターゲット属性が最初に渡されることを確認してください。リンクに追加の属性がある場合は、それらをコピーして参照URLの最後に貼り付けてください。

直接リンクとしても機能します。
[Go to this page](http://somelink.com/?target=_blank)

于 2017-04-30T18:57:55.743 に答える
7

これは、次のようなネイティブJavaScriptコードを介して行うことができます。

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

JSFiddleコード

于 2014-06-10T21:17:00.343 に答える
7

私のプロジェクトではこれを行っていますが、正常に機能します。

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

リンク

しかし、すべてのパーサーがそれを許可しているわけではありません。

于 2015-06-22T13:51:56.163 に答える
7

それを行う簡単な方法はありません。@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/

于 2015-08-27T14:10:06.370 に答える
7

直接的な答えではありませんが、ここにたどり着く人を助けるかもしれません。

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"ます。

さらにオプションが必要な場合は、ドキュメントを参照してください。

于 2020-06-23T05:51:10.003 に答える
0

PHPを使用してマークダウンを実装しようとしたときに、この問題が発生しました。

マークダウンで作成されたユーザー生成リンクは新しいタブで開く必要がありますが、サイトリンクはタブにとどまる必要があるため、新しいタブで開くリンクのみを生成するようにマークダウンを変更しました。したがって、ページ上のすべてのリンクがリンクアウトするわけではなく、マークダウンを使用するリンクだけです。

マークダウンでは、すべてのリンク出力を、<a target='_blank' href="...">検索/置換を使用して十分に簡単なものに変更しました。

于 2014-01-06T23:28:49.393 に答える
0

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>
于 2014-02-21T11:52:41.467 に答える
0

GNU sed&makeを使用して、外部リンクに対してのみ自動化

すべての外部リンクに対してこれを体系的に実行したい場合、CSSはオプションではありません。ただし、sedMarkdownから(X)HTMLが作成されたら、次のコマンドを実行できます。

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

上記のsedコマンドをに追加することで、これをさらに自動化できますmakefile。詳細については、GNUを参照するmake、Webサイトでそれをどのように行ったかを確認してください。

于 2014-06-10T13:24:59.690 に答える
0

{[attr] = "[prop]"}を使用して、任意の属性を追加できます

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

于 2014-10-14T09:28:00.077 に答える
0

完了したアレックスの回答(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';
        } 
    }
}
于 2015-02-04T10:48:07.310 に答える
0

特定のリンクでこれを実行したい場合は、他の人が回答したようにインライン属性リスト構文を使用するか、HTMLを使用してください。

生成されたすべてのタグでこれを実行したい場合は<a>、Markdownコンパイラによって異なりますが、拡張機能が必要な場合があります。

私は最近、pelicanを使用するによって生成される私のブログのためにこれを行っていますPython-Markdown。そして、Python-Markdown Phuker / markdown_link_attr_modifierの拡張機能を見つけました、それはうまく機能します。と呼ばれる古い拡張機能newtabはPython-Markdown3.xでは機能しないようです。

于 2020-10-09T22:25:01.353 に答える
0

誰かがグローバルrmarkdownpandoc)ソリューションを探している場合。

PandocLuaフィルターの使用

すべてのリンクに追加する独自のPandocLuaフィルターを作成できます。target="_blank"

  1. Pandoc Lua Filterを作成し、たとえば名前を付けますlinks.lua
function Link(element)

    if 
        string.sub(element.target, 1, 1) ~= "#"
    then
        element.attributes.target = "_blank"
    end
    return element

end
  1. 次に、_output.yml
bookdown::gitbook:
  pandoc_args:
    - --lua-filter=links.lua

ヘッダー<base target="_blank">に挿入

別の解決策は、オプションを使用<base target="_blank">してHTMLheadセクションに挿入することです。includes

  1. 新しいHTMLファイルを作成し、たとえば名前を付けますlinks.html
<base target="_blank">
  1. 次に、_output.yml
bookdown::gitbook:
  includes:
    in_header: links.html

注:このソリューションでは、ハッシュ(#)ポインター/URLの新しいタブが開く場合もあります。私はそのようなURLでこのソリューションをテストしていません。

于 2022-02-23T01:14:56.777 に答える
-3

これは私のために働きます:[ページリンク](ここにあなたのURL "(target | _blank)")

于 2018-10-23T16:21:34.133 に答える