Gitbook中download属性失效,点击链接新开标签而非下载
解决Gitbook自动修改a标签属性导致download失效的问题
嘿,我太懂这种Gitbook瞎改代码的糟心感了!它自动给外链加上target="_blank"的操作,直接把你设置的download下载功能给冲没了,给你几个亲测有效的解决办法:
方案一:用自定义脚本修正链接属性
借助Gitbook的自定义JS插件,在页面加载后自动修正带download属性的链接:- 先在你的Gitbook项目根目录的
book.json里添加插件配置:{ "plugins": ["custom-js"], "pluginsConfig": { "custom-js": ["assets/js/custom.js"] } } - 创建
assets/js/custom.js文件,写入以下代码:document.addEventListener('DOMContentLoaded', function() { // 筛选所有带download属性的链接 const downloadLinks = document.querySelectorAll('a[download]'); downloadLinks.forEach(link => { // 把target改回_self,覆盖Gitbook的设置 link.setAttribute('target', '_self'); // 修复Gitbook自动清空的download属性值 if (link.getAttribute('download') === '') { link.setAttribute('download', 'fundebug.0.1.2.min.js'); } }); }); - 执行
gitbook install安装插件,再启动服务就能生效了。
- 先在你的Gitbook项目根目录的
方案二:用onclick事件绕过target限制
直接在a标签里添加点击事件,阻止Gitbook的默认跳转行为,强制触发下载:<a href="https://ojv8yfncs.qnssl.com/fundebug.0.1.2.min.js" onclick="event.preventDefault(); window.location.href=this.href; return false;" download="fundebug.0.1.2.min.js">fundebug.0.1.2.min.js</a>这里
event.preventDefault()会拦截Gitbook自动添加的target="_blank"跳转,用window.location.href来触发浏览器的下载逻辑,完美保留download的功能。方案三:修改Gitbook核心模板(进阶)
如果你不想用插件,可以直接修改Gitbook生成HTML的模板文件,去掉自动添加target="_blank"的逻辑:- 找到Gitbook安装目录下的插件文件(通常在
node_modules/gitbook-plugin-sharing/lib/index.js,不同版本位置可能有变化) - 找到代码中添加
target="_blank"的部分,注释掉或者删除相关逻辑
注意:这个方法的缺点是Gitbook更新后需要重新修改,适合对项目环境有控制权的场景。
- 找到Gitbook安装目录下的插件文件(通常在
亲测前两个方案都能完美解决问题,你可以根据自己的需求选一个试试~
内容的提问来源于stack exchange,提问作者KiwenLau
相关产品推荐
相关产品推荐

