Typecho 文档:给页面外部链接使用新窗口打开功能

08月17日

适用程序:Typecho
程序版本:1.2.1
文档作者:Lopwon
作者博客:Lopwon.com
发布页面:Lopwon.com/attachment/3778/
许可方式:CC BY-NC-SA

注意:此文档源于作者在博客改造中的一些经验总结,转载还请署名。

敬告:此文档操作涉及程序核心文件的修改,作者不对你在使用中产生的任何问题造成的不良后果,承担责任。

文档说明

Typecho 默认在当前窗口打开链接页面,除了可以通过修改程序文件,或是主题文件里,在输出内容时,对链接进行替换,等等方式实现新窗口打开链接外,还可以使用以下方法。


使用方法

A 涉及文件

usr/themes/***/footer.php

B 改造文件

作用:自定义页面链接新窗口打开。

1. 打开文件  usr/themes/***/footer.php 或主题页脚文件,在页末添加以下代码(留意注释,以及按需修改):

    <script>
    $(document).ready(function() { // 页面加载完成后执行代码
        var keywords = ['yoursite.com', 'yourdomain.com']; // 未包含关键词数组的链接,使用新窗口打开(修改为自己的域名)
    
        $('a[href]').each(function() { // 查找页面中所有具有 href 属性的 <a> 标签
            var href = $(this).attr('href'); // 获取当前 <a> 标签的 href 属性值        
            var containsKeyword = keywords.some(function(keyword) { // 使用 Array.prototype.some() 方法检查 href 是否包含数组中的任何一个关键词
                return href.indexOf(keyword) !== -1; // 如果 href 中包含关键词,返回 true            
            });
            
            if (!containsKeyword) { // 如果 href 不包含任何关键词,则为该 <a> 标签添加 target 和 rel 属性
                $(this).attr('target', '_blank');  // 添加 target 属性,使链接在新窗口打开
                $(this).attr('rel', 'external nofollow noopener noreferrer'); // 添加 rel 属性,以增强安全性和 SEO            
            }
        });
    });
    </script>

2. 如果你在用的主题未引入 jQuery 库,则使用以下原生 JS 方式:

    <script>
    document.addEventListener('DOMContentLoaded', function() { // 页面加载完成后执行代码
        var keywords = ['yoursite.com', 'yourdomain.com']; // 未包含关键词数组的链接,使用新窗口打开(修改为自己的域名)
    
        var links = document.querySelectorAll('a[href]'); // 查找页面中所有具有 href 属性的 <a> 标签
        links.forEach(function(link) {
            var href = link.getAttribute('href'); // 获取当前 <a> 标签的 href 属性值
            var containsKeyword = keywords.some(function(keyword) { // 使用 Array.prototype.some() 方法检查 href 是否包含数组中的任何一个关键词
                return href.indexOf(keyword) !== -1; // 如果 href 中包含关键词,返回 true
            });
    
            if (!containsKeyword) { // 如果 href 不包含任何关键词,则为该 <a> 标签添加 target 和 rel 属性
                link.setAttribute('target', '_blank');  // 添加 target 属性,使链接在新窗口打开
                link.setAttribute('rel', 'external nofollow noopener noreferrer'); // 添加 rel 属性,以增强安全性和 SEO
            }
        });
    });
    </script>

至此,已完成给页面链接自定义使用新窗口打开功能,未包含关键词数组的链接,则使用新窗口打开。
store