正方教务管理系统首页证件照优化

将正方教务管理系统首页的证件照由入学后拍摄的证件照改为入学前拍摄的证件照。并删除证件照的圆角、边距,以及恢复证件照的原始比例。

// ==UserScript==
// @name         正方教务管理系统首页证件照优化
// @namespace    https://www.nianbroken.top/
// @version      1.0.5
// @description  将正方教务管理系统首页的证件照由入学后拍摄的证件照改为入学前拍摄的证件照。并删除证件照的圆角、边距,以及恢复证件照的原始比例。
// @author       NianBroken
// @match        *://*/*index_initMenu.html*
// @grant        none
// @icon         https://www.zfsoft.com/img/zf.ico
// @copyright    Copyright © 2024 NianBroken. All rights reserved.
// @license      Apache-2.0 license
// ==/UserScript==

(function () { // 使用立即调用函数表达式 (IIFE) 创建一个独立的作用域,以防止变量污染全局作用域
    "use strict"; // 启用严格模式,以捕获常见的错误并防止使用不安全的语法

    /**
     * 修改页面中的图片源和样式
     */
    function modifyImage() { // 定义一个函数,用于修改图片的属性和样式
        findImageElement(0); // 调用查找图片元素的函数,传入初始尝试次数为 0
    }

    /**
     * 查找页面中的图片元素,使用异步循环
     * @param {number} attempts - 当前尝试次数
     */
    function findImageElement(attempts) { // 定义一个函数,接受一个参数表示当前尝试查找图片的次数
        const maxAttempts = 100; // 定义一个常量,表示最大尝试次数为 100
        const delay = 100; // 定义一个常量,表示每次尝试之间的延迟时间为 100 毫秒

        if (attempts < maxAttempts) { // 如果当前尝试次数小于最大尝试次数
            const imgElement = document.querySelector("img.media-object"); // 尝试查找 class 为 "media-object" 的图片元素
            if (imgElement) { // 如果找到了图片元素
                logDetailed(`Attempt ${attempts + 1}: Image element found`); // 输出详细日志,说明第几次尝试找到了图片元素
                modifyImageSrc(imgElement); // 调用函数,修改图片的 src 属性
                removeHeightStyle(imgElement); // 调用函数,移除图片的 height 样式
                addStyles(imgElement); // 调用函数,为图片添加新的样式
                logSuccess(); // 输出成功日志,说明图片修改成功
            } else { // 如果没有找到图片元素
                logDetailed(`Attempt ${attempts + 1}: Image element not found`); // 输出详细日志,说明第几次尝试未找到图片元素
                setTimeout(() => findImageElement(attempts + 1), delay); // 使用 setTimeout 延迟 100 毫秒后,再次尝试查找图片元素,并将尝试次数加 1
            }
        } else { // 如果当前尝试次数达到或超过最大尝试次数
            logError("Image element not found after maximum attempts"); // 输出错误日志,说明达到最大尝试次数后仍未找到图片元素
        }
    }

    /**
     * 修改图片的 src 属性
     * @param {HTMLImageElement} imgElement - 图片元素
     */
    function modifyImageSrc(imgElement) { // 定义一个函数,用于修改图片元素的 src 属性
        const originalSrc = imgElement.src; // 获取图片元素的原始 src 属性
        imgElement.src = originalSrc.replace("rxhzp", "rxqzp"); // 将 src 属性中的 "rxhzp" 替换为 "rxqzp"
        logDetailed(`Image src modified from "${originalSrc}" to "${imgElement.src}"`); // 输出详细日志,说明图片的 src 属性已被修改
    }

    /**
     * 移除图片的 height 样式属性
     * @param {HTMLImageElement} imgElement - 图片元素
     */
    function removeHeightStyle(imgElement) { // 定义一个函数,用于移除图片元素的 height 样式
        if (imgElement.style.height) { // 如果图片元素存在 height 样式
            imgElement.style.removeProperty("height"); // 移除图片元素的 height 样式属性
            logDetailed("Height style removed from image"); // 输出详细日志,说明 height 样式已被移除
        } else { // 如果图片元素不存在 height 样式
            logDetailed("Image does not have height style"); // 输出详细日志,说明图片没有 height 样式
        }
    }

    /**
     * 添加图片的 border-radius 和 margin 样式
     * @param {HTMLImageElement} imgElement - 图片元素
     */
    function addStyles(imgElement) { // 定义一个函数,用于为图片元素添加新的样式
        imgElement.style.borderRadius = "0"; // 设置图片元素的 border-radius 样式为 0,使图片边框变为直角
        imgElement.style.margin = "0"; // 设置图片元素的 margin 样式为 0,移除图片的外边距
        logDetailed("Border-radius and margin styles added to image"); // 输出详细日志,说明已为图片添加了新的 border-radius 和 margin 样式
    }

    /**
     * 输出成功日志
     */
    function logSuccess() { // 定义一个函数,用于输出成功的日志信息
        console.log("Image modified successfully"); // 在控制台打印信息,说明图片修改成功
    }

    /**
     * 输出错误日志
     * @param {string} message - 错误消息
     */
    function logError(message) { // 定义一个函数,接受一个参数用于输出错误的日志信息
        console.error(message); // 在控制台打印错误信息
    }

    /**
     * 输出详细日志
     * @param {string} message - 详细消息
     */
    function logDetailed(message) { // 定义一个函数,接受一个参数用于输出详细的日志信息
        console.log(message); // 在控制台打印详细信息
    }

    // 页面加载完成后运行修改图片函数
    window.addEventListener("load", modifyImage); // 添加事件监听器,在页面加载完成后,调用 modifyImage 函数
})();