Red*_*ard 6 javascript markdown reactjs docusaurus
我正在使用 Docusaurus,并且想在新选项卡中打开外部链接。
我更愿意使用代码来实现此目的,而不是根据此答案在我的 markdown 文档中编写 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';
}
}
})();
Run Code Online (Sandbox Code Playgroud)
我将 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"
],
Run Code Online (Sandbox Code Playgroud)
该脚本似乎已加载,但未按预期工作。
我希望用 Markdown 编写的链接能够在新的浏览器选项卡中打开:
[the rmarkdown website](https://rmarkdown.rstudio.com)
Run Code Online (Sandbox Code Playgroud)
任何想法都会很棒 - 谢谢
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';
}
}
});
Run Code Online (Sandbox Code Playgroud)
不过,我建议您不要使用该脚本,而是通过其他几种方式来实现效果:
使用 Remarkable 插件进行自定义。值得注意的是 Markdown 引擎,可以将 Markdown 转换为 HTML。
这个非凡的 extlink 插件似乎正是您所需要的。尝试将其添加到您的 siteConfig 中!请参阅此处的siteConfig 文档。
// 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
});
},
],
...
}
Run Code Online (Sandbox Code Playgroud)
Remarkable 支持通过自定义linkTarget选项将所有链接设为外部链接,Docusaurus 公开了该选项siteConfig(但未记录),但目前无法正常工作。我已经提交了一个PR来解决这个问题,所以请在下一个版本中留意它。但是,我不推荐这种方法,因为它会使您的所有链接在新选项卡中打开,而不仅仅是外部链接。
就我个人而言,我只会使用此选项,因为它是最快的。而且这样做并没有什么错/坏处,而且我喜欢可以回退到 HTML。
编写您自己的插件来理解这种[link](url){:target="_blank"}语法并生成您想要的 HTML。如果您不想使用 HTML,这可能是最好的选择,但它需要付出最多的努力。
| 归档时间: |
|
| 查看次数: |
4125 次 |
| 最近记录: |