You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让R Bookdown代码块中的超链接在新标签页打开?

给Bookdown bs4_book代码块内的超链接添加target="_blank"

完全可以通过JavaScript实现这个需求,下面是具体的实现方案:

核心JavaScript代码

document.addEventListener('DOMContentLoaded', function() {
  // 选中所有downlit代码块里的超链接
  const codeBlockLinks = document.querySelectorAll('pre.downlit.sourceCode a');
  
  codeBlockLinks.forEach(link => {
    // 添加新窗口打开属性
    link.setAttribute('target', '_blank');
    // 可选:添加安全属性,避免新页面劫持原页面
    link.setAttribute('rel', 'noopener noreferrer');
  });
});

代码解释

  • DOMContentLoaded事件:保证页面所有DOM元素加载完成后再执行操作,避免找不到目标元素。
  • querySelectorAll('pre.downlit.sourceCode a'):精准匹配你提供的HTML结构中,代码块内的所有<a>标签,覆盖不同代码类型的代码块。
  • setAttribute:给每个超链接添加target="_blank",实现点击新窗口打开;额外添加的rel="noopener noreferrer"是安全最佳实践,防止恶意页面利用window.opener获取原页面权限。

如何在Bookdown项目中使用

方法1:全局引入(推荐)

  1. 在项目根目录创建assets/js文件夹,新建custom-code-links.js文件,将上面的JS代码粘贴进去。
  2. 修改项目的_output.yml配置文件,在bs4_book的includes中添加该脚本:
bs4_book:
  includes:
    in_header: assets/js/custom-code-links.js

方法2:单个Rmd文件引入

如果只想在特定页面生效,可以在对应Rmd文件的任意代码块中添加:

```{r echo=FALSE, include=TRUE}
htmltools::includeScript("assets/js/custom-code-links.js")
## 修改后的效果示例
原代码块中的超链接会被修改为:
```html
<span class="kw"><a href="https://rdrr.io/r/base/library.html" target="_blank" rel="noopener noreferrer">library</a></span>
<span class="op">(</span>
<span class="va"><a href="https://github.com/duncanplee/CARBayes" target="_blank" rel="noopener noreferrer">CARBayes</a></span>
<span class="op">)</span>

内容的提问来源于stack exchange,提问作者Sean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 16:43:37