Bisakah saya membuat tautan dengan 'target = “_ blank”' di Penurunan harga?

462

Apakah ada cara untuk membuat tautan dalam penurunan harga yang terbuka di jendela baru? Jika tidak, sintaks apa yang Anda rekomendasikan untuk melakukan ini. Saya akan menambahkannya ke kompiler markdown yang saya gunakan. Saya pikir itu harus menjadi pilihan.

ma11hew28
sumber
Jadi seperti yang ditunjukkan dalam jawaban, ini bukan fitur penurunan harga. Jika Anda ingin menjadikan ini sebagai tautan default ke seluruh situs, David Morrow memiliki jawabannya . Atau jika Anda hanya ingin melakukannya dalam satu contoh, maka jawaban Matchu mengatakan bahwa Anda harus benar-benar menulisnya dalam HTML.
JGallardo
kemungkinan duplikat dari Penurunan harga membuka tautan jendela baru
Serge Stroobandt
Pertanyaan Anda tidak spesifik tentang apa yang Anda lakukan, tetapi beberapa mesin penurunan harga atau peramban (tidak yakin yang mana) mengenali kapan tautan yang Anda buat menunjuk ke domain yang berbeda dan akan membukanya di tab baru. Bagi saya, ada kalanya menghapus sdari https:cukup untuk mendapatkan fungsionalitas yang saya inginkan.
Josh Gust

Jawaban:

379

Sejauh menyangkut sintaks Markdown, jika Anda ingin mendapatkan detail itu, Anda hanya perlu menggunakan HTML.

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

Kebanyakan mesin penurunan harga yang saya lihat memungkinkan HTML lama yang biasa, hanya untuk situasi seperti ini di mana sistem markup teks umum tidak akan memotongnya. (Mesin StackOverflow, misalnya.) Mereka kemudian menjalankan seluruh output melalui filter daftar putih HTML, terlepas, karena bahkan dokumen hanya Markdown dapat dengan mudah berisi serangan XSS. Dengan demikian, jika Anda atau pengguna Anda ingin membuat _blanktautan, maka mereka mungkin masih bisa.

Jika itu adalah fitur yang akan sering Anda gunakan, mungkin masuk akal untuk membuat sintaks Anda sendiri, tetapi itu biasanya bukan fitur vital. Jika saya ingin meluncurkan tautan itu di jendela baru, saya akan ctrl-klik sendiri, terima kasih.

Matchu
sumber
19
Anda tahu apa? Saya setuju dengan Anda dan Alex . Saya memutuskan untuk tidak menggunakan _blanksama sekali. Ini adalah pengalaman pengguna yang lebih baik untuk menyimpan berbagai hal dalam satu browser. Mereka bisa saja menekan balik atau mengklik perintah (pengguna Mac di sini :)), seperti yang Anda katakan.
ma11hew28
1
Saya menjalankan javascript pada halaman yang menambahkan _blank ke semua tautan di luar domain saya. seperti @alex ada di jawaban berikutnya
David Silva Smith
3
Saya akan menyarankan (dalam keinginan menjadi eksplisit dan dapat dibaca inline) sintaks berikut: [Visit this page](http::/link.com(untuk mendapatkan ide pembukaan .
Augustin Riedinger
4
Target sederhana = "_ blank" mungkin berbahaya! Tambahkan juga rel = "noopener" ke dalam tag! ( sites.google.com/site/bughunteruniversity/nonvuln/… )
Max Vyaznikov
1
@MaxVyaznikov Menarik. Apakah Anda pikir akan lebih aman jika browser memberikan jendela pop up tepi atas untuk login? Pisahkan UI login untuk situs web dari UI login palsu dan palsu yang dibuat oleh halaman web "mirip". Mungkin lebih mungkin sekarang di mana itu lebih sulit di masa lalu.
1,21 gigawatt
351

Kramdown mendukungnya. Ini kompatibel dengan sintaks penurunan harga standar, tetapi memiliki banyak ekstensi juga. Anda akan menggunakannya seperti ini:

[link](url){:target="_blank"}
selamat tinggal
sumber
7
Ini sepertinya tidak berfungsi menggunakan mesin Markdown pada Mac :-(
Netsi1964
49
Bekerja hebat dengan jekyll!
bholagabbar
1
The kramdown sintaks: [d] (URL_LINK) {: target = "_ blank"} bisa diurai ke dalam HTML menggunakan kramdown editor online: http://trykramdown.herokuapp.com/ Saya menggunakannya karena saya sudah memiliki beberapa referensi kramdown, dan ingin menghindari mengetik ulang mereka.
algoquant
4
Apakah ada cara di jekyll untuk mengatur ini sebagai default? Saya ingin semua tautan dalam posting blog saya dibukatarget="_blank"
ahirschberg
10
Itu tidak bekerja. Itu hanya menjadikan {: target = "_ blank"} sebagai teks.
Benny
113

Saya tidak berpikir ada fitur penurunan harga.

Meskipun mungkin ada opsi lain yang tersedia jika Anda ingin membuka tautan yang mengarah ke luar situs Anda secara otomatis dengan 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';
   } 
}

jsFiddle .

Jika Anda menggunakan jQuery itu sedikit lebih sederhana ...

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

jsFiddle .

alex
sumber
1
Saya setuju dengan Anda tetapi jika Anda berada dalam iframe Anda harus keluar dari frame dengan tautan.
David Morrow
2
Saya menemukan satu-satunya waktu saya memaksa orang ke jendela baru adalah ketika saya tengah menjalani kalimat yang menghubungkan suatu tempat di luar, dan saya ingin memberikan sumber untuk komentar saya tanpa mengganggu alur. Cuplikan js ini sangat ideal untuk tujuan - terima kasih,
terangkat
14
Saya pikir kutipan dari Jakob Nielson tidak berlaku di sini lagi. Dia mengeluh tentang membuka jendela baru, tetapi saat ini target = "_ blank" membuka di tab baru sebagai gantinya. Saya pribadi tidak suka jika tautan ke domain lain tidak terbuka di tab baru.
Alexander Rechsteiner
3
Juga: karena mengatakan Jakob Nielsen says you shouldn't do thatadalah argumen yang mengerikan.
Ola Tuvesson
2
Saya akan menambahkan di sini bahwa INI juga lebih disukai sebagai solusi global. Itu menjaga penurunan harga Anda bersih, yang merupakan titik penurunan harga.
Adam Michael Wood
47

Dengan Markdown-2.5.2, Anda dapat menggunakan ini:

[link](url){:target="_blank"}
meduvigo
sumber
2
Saya mencoba ini dan itu tidak berhasil untuk saya. Menggunakan dengan django 1.6
joel goldstick
5
Bekerja dengan Jekyll v2.4.0 (mungkin bekerja dengan versi sebelumnya juga)
nicksuch
5
Ini adalah kramdown (dan karena Jekyll menggunakan kramdown, ia bekerja dengan Jekyll).
z3ntu
1
Tampaknya tidak bisa membuat sintaks ini berfungsi di GitLab. Saya tidak yakin versi Markdown mana yang sedang digunakan.
Rockin4Life33
Apakah ada cara untuk menjadikan ini default, jadi saya tidak harus menentukannya untuk setiap tautan?
Connel
8

Salah satu solusi global adalah dengan memasukkan elemen <base target="_blank"> halaman Anda <head>. Itu secara efektif menambahkan target default ke setiap elemen jangkar. Saya menggunakan penurunan harga untuk membuat konten di situs web berbasis Wordpress saya, dan penyesuai tema saya akan membiarkan saya menyuntikkan kode itu ke bagian atas setiap halaman. Jika tema Anda tidak melakukan itu, ada plug-in

aholub
sumber
8

Saya menggunakan Grav CMS dan ini berfungsi dengan baik:

Isi / Tubuh:
Some text[1]

Badan / Referensi:
[1]: http://somelink.com/?target=_blank

Pastikan saja atribut target dilewati terlebih dahulu, jika ada atribut tambahan di tautan, salin / rekatkan ke akhir URL referensi.

Juga berfungsi sebagai tautan langsung:
[Go to this page](http://somelink.com/?target=_blank)

Peter Danshov
sumber
Untuk referensi, berikut adalah bab dokumentasi yang relevan .
domsson
7

Untuk penggunaan markdown hantu:

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

Ditemukan di sini: https://cmatskas.com/open-external-links-in-a-new-window-ghost/

guya
sumber
1
Saya suka solusi Anda. karena saya sudah mencobanya dengan konfigurasi yang berbeda sepertinya hanya berfungsi di inline linking . mungkin ada cara untuk menghubungkan dengan tautan referensi . sesuatu seperti: [open new window][1] \n [1]: (https://abc.xyz" target="_blank). mungkin saya keliru sesuatu, atau ini tidak berfungsi seperti itu?
MrIsaacs
7

Jadi, tidak sepenuhnya benar bahwa Anda tidak dapat menambahkan atribut tautan ke URL Penurunan harga. Untuk menambahkan atribut, periksa dengan pengurai markdown yang mendasarinya sedang digunakan dan apa ekstensi mereka.

Secara khusus, pandocmemiliki ekstensi untuk diaktifkan link_attributes, yang memungkinkan markup di tautan. misalnya

[Hello, world!](http://example.com/){target="_blank"}
  • Bagi mereka yang datang dari R (misalnya menggunakan rmarkdown, bookdown, blogdowndan sebagainya), ini adalah sintaks yang Anda inginkan.
  • Bagi mereka yang tidak menggunakan R , Anda mungkin perlu mengaktifkan ekstensi dalam panggilan pandocdengan+link_attributes

Catatan: Ini berbeda dari kramdowndukungan parser, yang merupakan salah satu jawaban yang diterima di atas. Secara khusus, perhatikan bahwa kramdown berbeda dari pandoc karena memerlukan tanda titik dua - :- pada awal kurung keriting - {}, misalnya

[link](http://example.com){:hreflang="de"}

Khususnya:

# Pandoc
{ attribute1="value1" attribute2="value2"}

# Kramdown
{: attribute1="value1" attribute2="value2"}
 ^
 ^ Colon
tanpa mantel
sumber
Ini berfungsi untuk saya di lingkungan penurunan harga kustom kami. Terima kasih!
klewis
6

Anda dapat melakukan ini melalui kode javascript asli seperti:

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

Kode JSFiddle

Tn. Penguin Pablo
sumber
6

Dalam proyek saya, saya melakukan ini dan berfungsi dengan baik:

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

Tautan

Tetapi tidak semua parser membiarkan Anda melakukan itu.

pengguna5036455
sumber
Hampir berfungsi, tetapi bahkan contoh Anda dirender dengan url yang dikodekan ke dalam judul attr, bukan sebagai attrs baru (lihat sumber atau edit simpul sebagai html): <a href="https://example.org/" rel="nofollow" title="title&quot; target=&quot;_blank">Link</a>
Graham P Heath
6

Tidak ada cara mudah untuk melakukannya, dan seperti @alex telah mencatat Anda harus menggunakan JavaScript. Jawabannya adalah solusi terbaik tetapi untuk mengoptimalkannya, Anda mungkin ingin memfilter hanya ke tautan post-konten.

<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>

Kode ini kompatibel dengan IE8 + dan Anda dapat menambahkannya ke bagian bawah halaman Anda. Perhatikan bahwa Anda perlu mengubah ".post-content a" ke kelas yang Anda gunakan untuk posting Anda.

Seperti yang terlihat di sini: http://blog.hubii.com/target-_blank-for-links-on-ghost/

midudev
sumber
0

Saya mengalami masalah ini ketika mencoba menerapkan penurunan harga menggunakan PHP.

Karena pengguna membuat tautan yang dibuat dengan penurunan harga perlu membuka di tab baru tetapi tautan situs perlu tetap di tab saya mengubah penurunan harga hanya menghasilkan tautan yang terbuka di tab baru. Jadi tidak semua tautan di halaman keluar, hanya yang menggunakan markdown.

Dalam penurunan harga saya mengubah semua output tautan menjadi <a target='_blank' href="...">yang cukup mudah menggunakan find / replace.

pengguna3167223
sumber
0

Saya tidak setuju bahwa pengalaman pengguna yang lebih baik untuk tetap berada dalam satu tab browser. Jika Anda ingin orang-orang tetap di situs Anda, atau kembali untuk menyelesaikan membaca artikel itu, kirim mereka di tab baru.

Membangun jawaban @ davidmorrow, buang javascript ini ke situs Anda dan ubah tautan eksternal menjadi tautan dengan 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>
Danny
sumber
0

Anda dapat menambahkan atribut apa pun menggunakan {[attr] = "[prop]"}

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

Leonardli
sumber
0

Untuk jawaban lengkap dijawab (13 Des '10)

Target injeksi yang lebih cerdas dapat dilakukan dengan kode ini:

/*
 * 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');

Anda dapat mengubah pengecualian regexp dengan menambahkan lebih banyak ekstensi dalam (?!html?|php3?|aspx?)konstruksi grup (pahami regexp ini di sini: https://regex101.com/r/sE6gT9/3 ).

dan untuk versi tanpa jQuery, periksa kode di bawah ini:

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';
        } 
    }
}
Bruno Lesieur
sumber
0

Otomatis untuk tautan eksternal saja, menggunakan sed & make GNU

Jika seseorang ingin melakukan ini secara sistematis untuk semua tautan eksternal, CSS bukanlah pilihan . Namun, seseorang dapat menjalankan sedperintah berikut setelah (X) HTML dibuat dari penurunan harga:

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

Ini dapat diotomatisasi lebih lanjut dengan menambahkan sedperintah di atas ke a makefile. Untuk detailnya, lihat GNU makeatau lihat bagaimana saya melakukannya di situs web saya .

Serge Stroobandt
sumber
-3

Ini berfungsi untuk saya: [Tautan Halaman] (url Anda di sini "(target | _blank)")

Jose Espin
sumber