มีวิธีในการสร้างลิงค์ใน Markdown ที่เปิดในหน้าต่างใหม่หรือไม่? ถ้าไม่คุณแนะนำให้ใช้ไวยากรณ์อะไร ฉันจะเพิ่มลงในคอมไพเลอร์ markdown ที่ฉันใช้ ฉันคิดว่ามันควรจะเป็นตัวเลือก
s
จากhttps:
คือเพียงพอที่จะได้รับฟังก์ชั่นที่ฉันต้องการ
มีวิธีในการสร้างลิงค์ใน Markdown ที่เปิดในหน้าต่างใหม่หรือไม่? ถ้าไม่คุณแนะนำให้ใช้ไวยากรณ์อะไร ฉันจะเพิ่มลงในคอมไพเลอร์ markdown ที่ฉันใช้ ฉันคิดว่ามันควรจะเป็นตัวเลือก
s
จากhttps:
คือเพียงพอที่จะได้รับฟังก์ชั่นที่ฉันต้องการ
คำตอบ:
ถ้าคุณต้องการทราบรายละเอียดนั้นคุณจะต้องใช้ HTML
<a href="http://example.com/" target="_blank">Hello, world!</a>
เอ็นจิ้นมาร์กดาวน์ส่วนใหญ่ที่ฉันเคยเห็นอนุญาตให้ใช้ HTML แบบเก่าธรรมดาสำหรับสถานการณ์เช่นนี้เท่านั้นที่ระบบมาร์คอัปข้อความทั่วไปจะไม่ตัดมัน (ตัวอย่างเช่นเครื่องมือ StackOverflow) จากนั้นพวกเขาจะรันเอาต์พุตทั้งหมดผ่านตัวกรองรายการที่อนุญาต HTML โดยไม่คำนึงถึงเนื่องจากแม้แต่เอกสารที่มี Markdown เท่านั้นก็สามารถมีการโจมตี XSS ได้อย่างง่ายดาย ดังนั้นหากคุณหรือผู้ใช้ของคุณต้องการสร้าง_blank
ลิงก์ก็อาจทำได้
ถ้านั่นเป็นคุณสมบัติที่คุณจะใช้บ่อยมันอาจสมเหตุสมผลในการสร้างไวยากรณ์ของคุณเอง แต่โดยทั่วไปไม่ใช่คุณสมบัติที่สำคัญ หากฉันต้องการเปิดลิงค์นั้นในหน้าต่างใหม่ฉันจะคลิกเองเองขอบคุณ
_blank
เลย มันเป็นประสบการณ์ที่ดีกว่าสำหรับผู้ใช้ในการเก็บสิ่งต่าง ๆ ไว้ในเบราว์เซอร์เดียว พวกเขาสามารถกดกลับหรือคลิกคำสั่ง (ผู้ใช้ Mac ที่นี่ :)) เช่นที่คุณพูด
[Visit this page](http::/link.com(
จะได้รับความคิดของการเปิด
Kramdownรองรับ มันเข้ากันได้กับไวยากรณ์ Markdown มาตรฐาน แต่ก็มีส่วนขยายจำนวนมากเช่นกัน คุณจะใช้มันแบบนี้:
[link](url){:target="_blank"}
target="_blank"
ฉันไม่คิดว่าจะมีคุณสมบัติการมาร์คดาวน์
แม้ว่าอาจมีตัวเลือกอื่น ๆ หากคุณต้องการเปิดลิงก์ที่ชี้นอกไซต์ของคุณโดยอัตโนมัติด้วย 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';
}
}
jsFiddlejsFiddle
หากคุณใช้ jQuery มันง่ายกว่านิดหน่อย ...
$(document.links).filter(function() {
return this.hostname != window.location.hostname;
}).attr('target', '_blank');
Jakob Nielsen says you shouldn't do that
เป็นเรื่องที่แย่มาก
ด้วย Markdown-2.5.2 คุณสามารถใช้สิ่งนี้:
[link](url){:target="_blank"}
โซลูชันระดับโลกวิธีหนึ่งคือการใส่องค์ประกอบ<base target="_blank">
ของหน้าเว็บของ<head>
คุณ ที่เพิ่มเป้าหมายเริ่มต้นอย่างมีประสิทธิภาพให้กับทุกองค์ประกอบสมอ ฉันใช้ markdown เพื่อสร้างเนื้อหาบนเว็บไซต์ที่ใช้ Wordpress ของฉันและเครื่องมือปรับแต่งธีมของฉันจะให้ฉันแทรกโค้ดนั้นลงในส่วนบนสุดของทุกหน้า หากธีมของคุณไม่ทำเช่นนั้นแสดงว่ามีปลั๊กอิน
ฉันใช้ Grav CMS และทำงานได้อย่างสมบูรณ์:
ตัวถังรถ / เนื้อหา:
Some text[1]
ตัวถังรถ / อ้างอิง:
[1]: http://somelink.com/?target=_blank
ตรวจสอบให้แน่ใจว่าแอตทริบิวต์เป้าหมายนั้นผ่านไปก่อนหากมีแอตทริบิวต์เพิ่มเติมในลิงก์ให้คัดลอก / วางไปยังจุดสิ้นสุดของ URL อ้างอิง
ทำงานเป็นลิงก์โดยตรง:
[Go to this page](http://somelink.com/?target=_blank)
สำหรับ markdown ghost ให้ใช้:
[Google](https://google.com" target="_blank)
พบได้ที่นี่: https://cmatskas.com/open-external-links-in-a-new-window-ghost/
[open new window][1] \n [1]: (https://abc.xyz" target="_blank)
สิ่งที่ชอบ: บางทีฉันอาจจะเข้าใจผิดบางอย่าง
ดังนั้นจึงไม่เป็นความจริงเลยที่คุณจะไม่สามารถเพิ่มแอททริบิวต์ลิงค์ลงใน URL มาร์คดาวน์ได้ หากต้องการเพิ่มแอททริบิวให้ตรวจสอบกับตัวแยกวิเคราะห์มาร์คดาวน์พื้นฐานที่ใช้และส่วนขยายใดบ้าง
โดยเฉพาะอย่างยิ่งpandoc
มีส่วนขยายที่เปิดใช้link_attributes
งานซึ่งอนุญาตให้มาร์กอัปในลิงก์ เช่น
[Hello, world!](http://example.com/){target="_blank"}
rmarkdown
, bookdown
, blogdown
และอื่น ๆ ) นี้เป็นไวยากรณ์ที่คุณต้องการpandoc
ด้วย+link_attributes
หมายเหตุ:นี่แตกต่างจากการkramdown
สนับสนุนของ parser ซึ่งเป็นคำตอบที่ได้รับการยอมรับข้างต้น โดยเฉพาะอย่างยิ่งโปรดทราบว่า kramdown แตกต่างจากแพนโดเนื่องจากต้องใช้เครื่องหมายจุดคู่ - :
- ที่จุดเริ่มต้นของวงเล็บปีกกา - {}
เช่น
[link](http://example.com){:hreflang="de"}
โดยเฉพาะอย่างยิ่ง:
# Pandoc
{ attribute1="value1" attribute2="value2"}
# Kramdown
{: attribute1="value1" attribute2="value2"}
^
^ Colon
คุณสามารถทำได้ผ่านรหัสจาวาสคริปต์ดั้งเดิมเช่น:
var pattern = /a href=/g;
var sanitizedMarkDownText = rawMarkDownText.replace(pattern,"a target='_blank' href=");
ในโครงการของฉันฉันทำสิ่งนี้และใช้งานได้ดี:
[Link](https://example.org/ "title" target="_blank")
แต่ไม่ใช่ parsers ทั้งหมดที่อนุญาตให้คุณทำเช่นนั้น
<a href="https://example.org/" rel="nofollow" title="title" target="_blank">Link</a>
ไม่มีวิธีง่ายๆในการทำเช่นนั้นและเช่นเดียวกับ @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/
ฉันพบปัญหานี้เมื่อพยายามใช้ markdown โดยใช้ PHP
เนื่องจากผู้ใช้สร้างลิงค์ที่สร้างด้วยมาร์กอัปจำเป็นต้องเปิดในแท็บใหม่ แต่ลิงก์ของไซต์ต้องอยู่ในแท็บฉันเปลี่ยนมาร์กอัปเพื่อสร้างลิงก์ที่เปิดในแท็บใหม่เท่านั้น ดังนั้นไม่ใช่ลิงก์ทั้งหมดที่เชื่อมโยงกับหน้าเว็บ แต่เป็นลิงก์ที่ใช้มาร์กอัป
ใน markdown ฉันเปลี่ยนเอาต์พุตลิงก์ทั้งหมดให้<a target='_blank' href="...">
เป็นเรื่องง่ายพอโดยใช้ find / replace
ฉันไม่เห็นด้วยที่จะให้ประสบการณ์ผู้ใช้ที่ดีกว่าในการอยู่ในแท็บเบราว์เซอร์เดียว หากคุณต้องการให้ผู้คนอยู่ในไซต์ของคุณหรือกลับมาอ่านบทความนั้นให้จบให้ส่งออกในแท็บใหม่
สร้างคำตอบของ @davidmorrow โยนจาวาสคริปต์นี้ลงในเว็บไซต์ของคุณและเปลี่ยนลิงค์ภายนอกเป็นลิงก์ที่มี 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>
คุณสามารถเพิ่มแอททริบิวต์ใด ๆ โดยใช้ {[attr] = "[prop]"}
ตัวอย่างเช่น [Google] ( http://www.google.com ) {target = "_ blank"}
สำหรับคำตอบ alex ที่สมบูรณ์ (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');
คุณสามารถเปลี่ยนข้อยกเว้น regexp ด้วยการเพิ่มส่วนขยายเพิ่มเติมในการ(?!html?|php3?|aspx?)
สร้างกลุ่ม (เข้าใจ 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';
}
}
}
หากใครต้องการที่จะทำระบบนี้สำหรับการเชื่อมโยงภายนอกทั้งหมดCSS เป็นไม่มีทางเลือกอื่น อย่างไรก็ตามสามารถเรียกใช้sed
คำสั่งต่อไปนี้เมื่อสร้าง (X) HTML จาก Markdown:
sed -i 's|href="http|target="_blank" href="http|g' index.html
นี้ได้โดยอัตโนมัติต่อไปโดยการเพิ่มดังกล่าวข้างต้นคำสั่งไปยังsed
makefile
ดูรายละเอียดของกนูmake
หรือดูว่าฉันได้กระทำที่เกี่ยวกับเว็บไซต์ของฉัน
สิ่งนี้ใช้ได้กับฉัน: [ลิงค์ของหน้า] (URL ของคุณที่นี่ "(เป้าหมาย | _blank)")