Docusaurus - как открыть внешние ссылки в новой вкладке?
Я использую Docusaurus и хотел бы открыть внешние ссылки в новых вкладках.
Я бы предпочел использовать код для этого, а не решение написания HTML-кода в моем документе разметки в соответствии с этим ответом.
Я попробовал этот ответ:
[link](url){:target="_blank"}
Как и этот ответ:
[Google](https://google.com" target="_blank)
Я думаю, что этот пост, вероятно, будет делать то, что я хочу, я попытался добавить код в _index.js, но Docusaurus прекратил сборку.
(function() {
var links = document.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
if (/^(https?:)?\/\//.test(links[i].getAttribute('href'))) {
links[i].target = '_blank';
}
}
})();
Я загрузил код JavaScript на GitHub и добавил его в siteConfig.js
:
// Add custom scripts here that would be placed in <script> tags.
scripts: [
"https://buttons.github.io/buttons.js",
"https://msdcanderson.github.io/docusaurus-open-link-new-tab.github.io/open-link-new-tab.js"
],
Сценарий, кажется, загружается, но не работает, как ожидалось.
Я ожидаю, что ссылка, написанная в Markdown, откроется в новой вкладке браузера:
[the rmarkdown website](https://rmarkdown.rstudio.com)
Любые идеи будут великолепны - спасибо
1 ответ
Сопровождающий Docusaurus здесь!
Вы правы, что Docusaurus не поддерживает это из коробки. Вероятная причина того, что ваш скрипт не работает, заключается в том, что Docusaurus внедряет <script>
теги выше <body>
и когда скрипт запускается, <body>
не загружен и нет <a>
теги для работы. Попробуйте обернуть ваш код в document.addEventListener('DOMContentLoaded', ...)
как это:
document.addEventListener('DOMContentLoaded', function() {
var links = document.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
if (/^(https?:)?\/\//.test(links[i].getAttribute('href'))) {
links[i].target = '_blank';
}
}
});
Тем не менее, я рекомендую вам не использовать этот сценарий и вместо этого добиться эффекта несколькими другими способами:
1. Замечательные плагины
Настройте это с помощью замечательных плагинов. Замечательным является механизм уценки, который преобразует уценку в HTML.
Этот замечательный плагин extlink, кажется, то, что вам нужно. Попробуйте добавить его на свой сайт! Обратитесь к документации по конфигурации сайта здесь.
// siteConfig.js
const extlink = require('remarkable-extlink');
const siteConfig = {
...
markdownPlugins: [
function(md) {
extlink(md, {
host: 'yourhost.com', // The hrefs that you DON'T want to be external
});
},
],
...
}
2. Замечательные варианты
Замечательная поддержка делает все ссылки внешними, настраивая linkTarget
вариант и докузавр разоблачает, что в siteConfig
(но не задокументировано) и не работает в данный момент. Я представил PR, чтобы исправить это, так что следите за этим в следующем выпуске. Однако я бы не рекомендовал этот подход, поскольку он открывает все ваши ссылки в новой вкладке, а не только внешние.
3. Используйте HTML в вашей уценке
Лично я бы просто использовал эту опцию, поскольку она самая быстрая. Также в этом нет ничего плохого / плохого, и мне нравится, что я могу использовать HTML.
4. Напишите свой собственный замечательный плагин
Напишите свой собственный плагин, который понимает такой [link](url){:target="_blank"}
синтаксис и генерирует HTML, который вы хотите. Это может быть лучшим вариантом, если вы не хотите использовать HTML, но это требует больше усилий.