hack 小技巧解决 solo 的 md 解析器 []() 语法不支持新窗口 (标签) 打开页面功能

本贴最后更新于 2687 天前,其中的信息可能已经时移俗易

前言:

众所周知 md 文档中使用 [链接文本显示内容](URL) 语法来表示超链接,但是解析器生成的 html 内容中的 a 标签都是 target='_self' ;一般情况下在本页面打开新的页面内容很正常没有什么问题,但是当博文中引用了外站资源的时候,很多情况下并不希望读者在阅读过程中在本页面内进行跳转,会打断阅读的连贯性,但是又不能不提供一手资料的原文链接,折中方案是针对外链在新标签页打开,阅读完后让用户关闭外链后能继续之前的阅读,因此有了下面的想法内容:

实施:

思路: 在不改动 solo 源代码的前提下,利用 solo 提供的后台管理界面在 工具-> 偏好设置-> 信息配置中自定义添加脚本内容,具体代码如下,请自行阅读注释内容:


<script type='text/javascript'>
//因为solo中jq的加在顺序在这些自定义配置后面,因此使用原生js的onload方法,保证依赖的jq库能提前载入!
	window.onload = function () {
	    $(function () {
	    //针对页面的所有a标签进行处理
            $('a').each(function(){
            /*
            因为很多a标签用来做锚链接跳转或者执行js函数或者使用相对路径进行站内跳转,
            因此,使用第一个条件保证只选取(可能)进行外部页面跳转的链接,
            第二个条件按照自己的域名灵活配置,保证站内跳转不会打开新的页面防止打开页面太多;
            ps:或者更灵活的思路是
            --本站域名应该是从配置文件里面写到ftl模版的,去翻一下ftl语法中如何在js中使用作用域变量,
            请自行了解,我这比较随性,就写死了,没人管的话,改天我看下    
            */
				if($(this).attr('href') 
				&& $(this).attr('href').indexOf('http')==0 
				&& $(this).attr('href').indexOf('blog.washmore')==-1){
				//为满足条件的a标签追加新窗口打开链接的属性
					$(this).attr("target","_blank");
				}
			});
        });
	}
</script>

结语:

在自己的 blog 测试了一下,效果还不错,大伙有兴趣的拿去试试呗

  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3453 回帖 • 203 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖
  • 博客

    记录并分享人生的经历。

    273 引用 • 2388 回帖
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1434 引用 • 10054 回帖 • 490 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...