क्या मैं मार्कडाउन में 'लक्ष्य = "रिक्त" के साथ लिंक बना सकता हूं?


460

क्या मार्कडाउन में एक लिंक बनाने का एक तरीका है जो एक नई विंडो में खुलता है? यदि नहीं, तो आप ऐसा करने के लिए कौन सा वाक्यविन्यास सुझाते हैं। मैं इसे मार्कडाउन कंपाइलर में उपयोग करता हूँ। मुझे लगता है कि यह एक विकल्प होना चाहिए।


इसलिए जैसा कि उत्तरों में बताया गया है, यह मार्कडाउन की विशेषता नहीं है। यदि आप इसे लिंक करने के लिए एक डिफ़ॉल्ट साइवाइड बनाना चाहते हैं, तो डेविड मॉरो का जवाब है । या यदि आप इसे एक उदाहरण में करना चाहते हैं, तो माचू का जवाब कहता है कि आपको वास्तव में HTML में लिखना होगा।
जेगलार्डो


आपका प्रश्न विशिष्ट नहीं है कि आप क्या कर रहे हैं, लेकिन कुछ मार्कडाउन इंजन या ब्राउज़र (निश्चित नहीं हैं) कि जब आप जो लिंक बना रहे हैं उसे पहचानें एक अलग डोमेन की ओर इशारा कर रहा है और एक नए टैब में उन्हें खोलेगा। मेरे लिए, कई बार जब मैं चाहता हूं कि कार्यक्षमता को प्राप्त करने के लिए पर्याप्त sसे हटाना https:पर्याप्त है।
जोश गस्ट

जवाबों:


377

जहां तक ​​मार्कडाउन सिंटैक्स का सवाल है, यदि आप उस विस्तृत को प्राप्त करना चाहते हैं, तो आपको बस HTML का उपयोग करना होगा।

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

अधिकांश मार्कडाउन इंजनों को मैंने सादे पुराने HTML की अनुमति दी है, बस इस तरह की स्थितियों के लिए जहां एक सामान्य पाठ मार्कअप सिस्टम बस इसे काट नहीं करेगा। (उदाहरण के लिए, StackOverflow इंजन।) वे तब एक HTML श्वेतसूची फ़िल्टर के माध्यम से पूरे आउटपुट को चलाते हैं, भले ही, क्योंकि मार्कडाउन-केवल दस्तावेज़ में भी आसानी से XSS हमले हो सकते हैं। जैसे, यदि आप या आपके उपयोगकर्ता बनाना चाहते हैं_blank लिंक , तो वे अभी भी कर सकते हैं।

यदि यह एक ऐसी सुविधा है जिसका आप अक्सर उपयोग करने जा रहे हैं, तो यह आपके स्वयं के वाक्यविन्यास को बनाने के लिए समझ में आ सकता है, लेकिन यह आमतौर पर एक महत्वपूर्ण विशेषता नहीं है। अगर मैं उस लिंक को एक नई विंडो में लॉन्च करना चाहता हूं, तो मैं इसे स्वयं क्लिक करूँगा, धन्यवाद।


19
हां पता है क्या? मैं आपसे और एलेक्स से सहमत हूं । मैंने फैसला किया कि मैं इसका इस्तेमाल नहीं करूंगा _blank। एक ब्राउज़र में चीजों को रखना एक बेहतर उपयोगकर्ता अनुभव है। वे बस वापस या कमांड-क्लिक कर सकते हैं (मैक उपयोगकर्ता यहां :)), जैसे आप कहते हैं।
ma11hew28

1
मेरे पास उस पेज पर जावास्क्रिप्ट रन है जो मेरे डोमेन के बाहर सभी लिंक में _blank जोड़ता है। जैसे @alex का अगला जवाब है
डेविड सिल्वा स्मिथ

3
मैं सुझाव दूंगा (स्पष्ट और इनलाइन पठनीय होने की इच्छा में) निम्नलिखित वाक्यविन्यास: खोलने[Visit this page](http::/link.com( का विचार प्राप्त करने के लिए ।
ऑगस्टिन रिडिंगर

4
सरल लक्ष्य = "_ रिक्त" खतरनाक हो सकता है! टैग में rel = "noopener" भी जोड़ें! ( sites.google.com/site/bughunteruniversity/nonvuln/… )
Max Vyaznikov

1
@MaxVyaznikov दिलचस्प। क्या आपको लगता है कि अगर ब्राउजर लॉगिन के लिए एज पॉप अप विंडो प्रदान करता है तो यह अधिक सुरक्षित होगा? "लुकलाइक" वेब पृष्ठों द्वारा बनाई गई स्पूफ और नकली लॉगिन यूआई से वेबसाइटों के लिए लॉगिन यूआई को अलग करें। यह अब और अधिक संभव हो सकता है जहां अतीत में यह अधिक कठिन था।
1.21 गीगावाट

350

क्रामडाउन इसका समर्थन करता है। यह मानक मार्कडाउन सिंटैक्स के साथ संगत है, लेकिन कई एक्सटेंशन भी हैं। आप इसे इस तरह उपयोग करेंगे:

[link](url){:target="_blank"}

7
यह मैक पर
मार्कडाउन

48
जेकिल के साथ बढ़िया काम करता है!
भोलाबागर

1
Kramdown वाक्य रचना: [कड़ी नाम] (URL_LINK) {: लक्ष्य = "_ blank"} HTML में kramdown ऑनलाइन संपादक का उपयोग कर पार्स किया जा सकता: http://trykramdown.herokuapp.com/ मैं इसे इस्तेमाल किया है क्योंकि मैं पहले से ही काफी कुछ था क्रामडाउन संदर्भ, और उन्हें फिर से टालने से बचना चाहते थे।
algoquant

4
क्या इसे डिफ़ॉल्ट के रूप में सेट करने के लिए जेकिल में एक तरीका है? मैं अपने ब्लॉग पोस्ट के सभी लिंक के साथtarget="_blank"
ahirschberg

10
यह काम नहीं करता है। यह सिर्फ {: target = "_ blank"} को पाठ के रूप में प्रस्तुत करता है।
बेनी

113

मुझे नहीं लगता कि कोई मार्कडाउन सुविधा है।

हालाँकि आप अन्य विकल्प उपलब्ध हो सकते हैं यदि आप लिंक को खोलना चाहते हैं जो जावास्क्रिप्ट के साथ आपकी अपनी साइट के बाहर इंगित करता है।

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

यदि आप jQuery का उपयोग कर रहे हैं तो यह बहुत आसान है ...

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

jsFiddle


1
मैं आपसे सहमत हूं लेकिन इस अवसर पर कि आप एक आइफ्रेम में हैं, आपको लिंक के साथ फ्रेम से बाहर विस्फोट करने की आवश्यकता है।
डेविड मॉरो

2
मुझे एक ही समय मिलता है जब मैं लोगों को एक नई विंडो में मजबूर करता हूं, जब मैं एक वाक्य के माध्यम से आधे रास्ते में कहीं बाहरी लिंक करता हूं, और मैं प्रवाह को बाधित किए बिना अपनी टिप्पणियों के लिए स्रोत प्रदान करना चाहता हूं। यह js स्निपेट उद्देश्य के लिए आदर्श है - धन्यवाद,
उत्थित

14
मुझे लगता है कि जैकब नील्सन का उद्धरण अब यहां लागू नहीं होता है। वह नई विंडो खोलने के बारे में शिकायत करता है, लेकिन आजकल लक्ष्य = "खाली" इसके बजाय एक नए टैब में खुलता है। जब अन्य डोमेन के लिंक नए टैब में नहीं खुलते हैं तो मुझे व्यक्तिगत रूप से यह पसंद नहीं है।
अलेक्जेंडर रेचस्टीनर

3
यह भी: क्योंकि कहना Jakob Nielsen says you shouldn't do thatएक भयानक तर्क है।
ओला तुवेसन

2
मैं यहाँ जोड़ने जा रहा हूँ कि यह भी एक वैश्विक समाधान के रूप में बेहतर है। यह आपके मार्केडाउन को साफ रखता है, जो मार्कडाउन की बात है।
एडम माइकल वुड

47

Markdown-2.5.2 के साथ, आप इसका उपयोग कर सकते हैं:

[link](url){:target="_blank"}

2
मैंने यह कोशिश की और यह मेरे काम नहीं आया। Django 1.6 के साथ प्रयोग करना
joel goldstick

5
Jekyll v2.4.0 के साथ काम करता है (पहले के संस्करणों के साथ भी काम कर सकता है)
nicksuch

5
यह क्रामडाउन है (और जैसा कि जेकेल क्रामडाउन का उपयोग करता है, यह जेकेल के साथ काम करता है)।
z3ntu

1
GitLab में काम करने के लिए इस वाक्यविन्यास को प्राप्त नहीं कर सकते। मुझे यकीन नहीं है कि मार्कडाउन का कौन सा संस्करण वर्तमान में उपयोग में है।
Rockin4Life33

क्या इसे डिफ़ॉल्ट बनाने का कोई तरीका है ताकि मुझे इसे हर लिंक के लिए निर्दिष्ट न करना पड़े?
कोनेल

8

एक वैश्विक समाधान <base target="_blank"> आपके पृष्ठ के <head>तत्व में डालना है। यह प्रभावी रूप से हर एंकर तत्व के लिए एक डिफ़ॉल्ट लक्ष्य जोड़ता है। मैं अपने वर्डप्रेस-आधारित वेब साइट पर सामग्री बनाने के लिए मार्कडाउन का उपयोग करता हूं, और मेरा थीम कस्टमाइज़र मुझे हर पृष्ठ के शीर्ष पर उस कोड को इंजेक्ट करने देगा। यदि आपका विषय ऐसा नहीं करता है, तो प्लग-इन है


8

मैं Grav CMS का उपयोग कर रहा हूं और यह पूरी तरह से काम करता है:

शारीरिक / सामग्री:
Some text[1]

शारीरिक / संदर्भ:
[1]: http://somelink.com/?target=_blank

बस सुनिश्चित करें कि लक्ष्य विशेषता पहले पारित की गई है, यदि लिंक में अतिरिक्त विशेषताएँ हैं, तो उन्हें संदर्भ URL के अंत में कॉपी / पेस्ट करें।

डायरेक्ट लिंक के रूप में भी काम करें:
[Go to this page](http://somelink.com/?target=_blank)



7

भूत मार्कडाउन उपयोग के लिए:

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

यह यहाँ मिला: https://cmatskas.com/open-external-links-in-a-new-window-ghost/


1
मुझे आपका समाधान पसंद है जैसा कि मैंने इसे विभिन्न विन्यासों के साथ आजमाया है, ऐसा लगता है कि यह केवल इनलाइन लिंकिंग का काम करता है । शायद संदर्भ लिंक के साथ लिंक करने का एक तरीका है । की तरह कुछ: [open new window][1] \n [1]: (https://abc.xyz" target="_blank)। शायद मैं कुछ गलती करूं, या यह उस तरह से काम करने के लिए मानसिक नहीं है?
MrIsaacs

7

इसलिए, यह बिल्कुल सच नहीं है कि आप मार्कडाउन URL में लिंक विशेषताएँ नहीं जोड़ सकते हैं। विशेषताएँ जोड़ने के लिए, अंतर्निहित मार्डन पार्सर का उपयोग किया जा रहा है और उनके एक्सटेंशन क्या हैं, इसकी जाँच करें।

विशेष रूप से, pandocसक्षम करने के लिए एक एक्सटेंशन है link_attributes, जो लिंक में मार्कअप की अनुमति देता है। जैसे

[Hello, world!](http://example.com/){target="_blank"}
  • से आने वाले उन लोगों के लिए आर (जैसे का उपयोग कर rmarkdown, bookdown,blogdown और पर इतना), इस वाक्य रचना आप चाहते है।
  • का उपयोग नहीं कर उन लोगों के लिए आर , आप की आवश्यकता हो सकती एक्सटेंशन सक्षम करने के लिए कॉल में pandocसाथ+link_attributes

नोट: यह kramdownपार्सर के समर्थन से अलग है , जो ऊपर दिए गए स्वीकृत उत्तरों में से एक है। विशेष रूप से, ध्यान दें कि कैंडडाउन पैंडॉक से अलग है क्योंकि इसके लिए एक बृहदान्त्र की आवश्यकता होती है - :- घुंघराले कोष्ठक की शुरुआत में - {}जैसे

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

विशेष रूप से:

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

# Kramdown
{: attribute1="value1" attribute2="value2"}
 ^
 ^ Colon

इसने हमारे लिए हमारे कस्टम मार्कडाउन माहौल में काम किया। धन्यवाद!
क्लेविस


6

मेरी परियोजना में मैं यह कर रहा हूँ और यह ठीक काम करता है:

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

संपर्क

लेकिन सभी पार्सर्स आपको ऐसा नहीं करने देते।


लगभग काम करता है, लेकिन यहां तक ​​कि आपका उदाहरण url के साथ प्रस्तुत होता है, शीर्षक attr में एन्कोड किया गया, न कि नए attrs (html के रूप में नोड को संपादित करें) के रूप में: <a href="https://example.org/" rel="nofollow" title="title&quot; target=&quot;_blank">Link</a>
ग्राहम पी हीथ

6

ऐसा करने का कोई आसान तरीका नहीं है, और जैसे @alex ने उल्लेख किया है कि आपको जावास्क्रिप्ट का उपयोग करने की आवश्यकता होगी। उसका जवाब सबसे अच्छा समाधान है लेकिन इसे अनुकूलित करने के लिए, आप केवल पोस्ट-कंटेंट लिंक को फ़िल्टर करना चाह सकते हैं।

<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" को उस वर्ग में बदलना होगा जो आप उपयोग कर रहे हैं।

जैसा कि यहाँ देखा गया है: http://blog.hubii.com/target-_blank-for-links-on-ghost/


0

PHP का उपयोग करके मार्कडाउन को लागू करने की कोशिश करते समय मैं इस समस्या में भाग गया।

चूंकि उपयोगकर्ता ने मार्कडाउन के साथ बनाए गए लिंक को एक नए टैब में खोलने की आवश्यकता है, लेकिन साइट लिंक को टैब में रहने की आवश्यकता है मैंने मार्कडाउन को केवल नए टैब में खुलने वाले लिंक उत्पन्न करने के लिए बदल दिया है। तो पेज लिंक पर सभी लिंक नहीं हैं, बस जो मार्कडाउन का उपयोग करते हैं।

मार्कडाउन में मैंने सभी लिंक आउटपुट को बदल दिया, <a target='_blank' href="...">जो कि खोजने / बदलने के लिए पर्याप्त आसान था।


0

मैं इस बात से सहमत नहीं हूं कि एक ब्राउज़र टैब में रहना बेहतर उपयोगकर्ता अनुभव है। यदि आप चाहते हैं कि लोग आपकी साइट पर बने रहें, या उस लेख को पढ़ने के लिए वापस आएं, तो उन्हें एक नए टैब में भेजें।

@ Davidmorrow के उत्तर पर बिल्डिंग, इस जावास्क्रिप्ट को अपनी साइट पर फेंक दें और लक्ष्य = _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>

0

आप {[attr] = "[prop]"} का उपयोग करके कोई भी विशेषता जोड़ सकते हैं

उदाहरण के लिए [Google] ( http://www.google.com ) {target = "_ blank"}


0

पूरा करने के लिए एलेक्स ने उत्तर दिया (13 दिसंबर 10)

इस कोड के साथ एक अधिक स्मार्ट इंजेक्शन लक्ष्य किया जा सकता है:

/*
 * 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?)समूह निर्माण में अधिक विस्तार जोड़ने के साथ regexp अपवादों को बदल सकते हैं (इस regexp को यहां समझें: 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';
        } 
    }
}

0

केवल बाहरी लिंक के लिए स्वचालित, GNU सेड और मेक का उपयोग करके

यदि कोई सभी बाहरी लिंक के लिए व्यवस्थित रूप से करना चाहेगा, तो CSS कोई विकल्प नहीं है । हालाँकि, एक sedबार X (HTML) एचटीएमएल मार्कडाउन से बनाया गया है , तो निम्न कमांड चला सकता है :

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

यह ऊपर sedकमांड को जोड़कर स्वचालित रूप से स्वचालित किया जा सकता है makefile। विवरण के लिए, GNU देखें makeया देखें कि मैंने अपनी वेबसाइट पर कैसे किया है


-3

यह मेरे लिए काम करता है: [पेज लिंक] (आपका यूआरएल यहाँ "(लक्ष्य | _ब्लैंक)")

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.