移除手机页面打开App提示|移除推荐下载App提示

移除手机页面打开App提示|移除推荐下载App提示|CSDN|知乎|B站|淘宝|京东|西瓜视频|优酷|东方财富网

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください。
// ==UserScript==
// @name         移除手机页面打开App提示|移除推荐下载App提示
// @version      0.0.4
// @description  移除手机页面打开App提示|移除推荐下载App提示|CSDN|知乎|B站|淘宝|京东|西瓜视频|优酷|东方财富网
// @author       luoyeah
// @match        *://*/*
// @require      https://libs.baidu.com/jquery/2.0.0/jquery.min.js
// @icon         https://www.csdn.net/favicon.ico
// @homepageURL  https://github.com/luoyeah/browser-script
// @namespace    https://greasyfork.org/users/1126380
// @grant        none
// @note         0.0.4 2023年07月20日 修复jquery冲突
// @license MIT
// ==/UserScript==

(function () {
    'use strict';

    // 网站匹配规则
    let site_db = [

        {
            site: "csdn.net",
            exec_duration: 5,
            // 移除元素列表
            hide_elements: [],
            // 移除元素列表
            remove_elements: [
                // 右上角打开app
                ".openApp.active",

                // 文章页
                // 工具栏下拉大按钮
                ".m_toolbar_left_app_btn",
                // 打开app遮蔽
                ".weixin-shadowbox.wap-shadowbox",
                // 返回栏
                ".aside-header-fixed",
                // 文章底部大按钮
                ".btn_open_app_prompt_div",

                // 推荐列表
                "#recommend",

                // 左上角图标
                // ".logo.floatL",

                // 搜索页
                ".openApp",

                // 操作栏
                "#operate",

                "span:contains('前往')",
            ],
            auto_click: [
                // 继续阅读
                {   // check_ele 可见时点击 click_ele
                    check_ele: ".btn_open_app_prompt_box.detail-open-removed",
                    click_ele: ".btn_open_app_prompt_box.detail-open-removed",
                },
                // 取消前往CSDNapp
                {
                    check_ele: "div:contains('前往CSDN APP阅读全文')",
                    click_ele: "a:contains('取消')",
                }
            ],
            // 自定义执行
            custom_eval: `
                        for(;;){
                            let url = "https://www.csdn.net/"
                            // 获取元素
                            let ele = jq(".mToolbarL.floatL a")
                            
                            // 判断是否存在
                            if(undefined==ele){
                                break
                            }

                            if(ele.attr("href")!=url){
                                 ele.attr("href",url)
                            }     
                            break
                        }

                    `
            ,
        },
        {
            site: "m.bilibili.com",
            exec_duration: -1,
            // 移除元素列表
            remove_elements: [
                // 主页
                // 右上角按钮
                ".m-nav-openapp",
                // 底部悬浮按钮
                ".m-home-float-openapp",

                // 播放页
                // 全屏提示下载app
                ".mplayer-fullscreen-call-app",
                // 倍数
                // ".mplayer-control-btn.mplayer-control-btn-callapp.mplayer-control-btn-speed",
                // 全屏提示下载
                ".mplayer-widescreen-callapp",
                // 全屏发弹幕
                // ".mplayer-control-btn.mplayer-btn-comment-middle.mplayer-btn-comment-full",
                // ".mplayer-btn-comment-content",
                // 播放完推荐app
                ".mplayer-end",
                // 全屏高清
                ".mplayer-control-btn.mplayer-control-btn-callapp.mplayer-control-btn-quality",
                // 播放页正下方按钮
                ".m-video2-awaken-btn-v2,.m-video2-awaken-btn",
                // 底部弹框推荐打开app
                ".openapp-dialog.large",
                // 底部看不够推荐下载app
                "#relateRecomMore",
                // 右下角bilibil内打开
                ".m-video2-float-openapp",

                // 下方推荐,都是跳转到app
                ".bottom-tab",
                ".caution-dialog",

                ".launch-app-btn.icon-spread",
                // 我的页面
                ".launch-app-btn.m-space-float-openapp",
            ],

            // 自动点击
            auto_click: [
                // 点击继续播放
                {
                    check_ele: "div:contains('立即播放')",
                    click_ele: "div:contains('立即播放')",
                },
                // 点击继续观看遮蔽
                {
                    check_ele: ".v-dialog.natural-dialog",
                    click_ele: ".to-see",
                },
                // 自动播放
                {
                    check_ele: ".mplayer-icon-call-app",
                    click_ele: ".mplayer-icon-call-app",
                },
                // 搜索页取消
                {
                    check_ele: ".open-app-dialog-btn.cancel",
                    click_ele: ".open-app-dialog-btn.cancel",
                },
            ]

        },
        {
            // 匹配网站
            site: "m.taobao.com",
            // 持续执行时间(秒)小于0代表永久执行
            exec_duration: 5,
            // 移除元素列表(默认为 jquery 选择器)
            remove_elements: [
                "button:contains('打开淘宝App')"
            ],
            // 自动点击列表
            auto_click: [
                {
                    // 当check_ele可见时点击click_ele
                    check_ele: "#SLK_manualPopCancel",
                    click_ele: "#SLK_manualPopCancel",
                },
            ]
        },
        {
            // 匹配网站
            site: "m.jd.com",
            // 持续执行时间(秒)小于0代表永久执行
            exec_duration: 5,
            // 移除元素列表(默认为 jquery 选择器)
            remove_elements: [
                // 上方打开app
                "#m_common_tip",
                "#pannelSeat",

                // 主页底部
                "#imk2FixedBottom",

                "div:contains('打开APP')",
            ],
            // 自动点击列表
            auto_click: [
            ]
        },
        {
            // 匹配网站
            site: "zhihu.com",
            // 持续执行时间(秒)小于0代表永久执行
            exec_duration: 5,
            // 移除元素列表(默认为 jquery 选择器)
            remove_elements: [
                // 上方打开app
                "button:contains('打开App')",

                // 主页底部
                ".OpenInAppButton",
            ],
            // 自动点击列表
            auto_click: [
                // 点击阅读更多
                {
                    // 当check_ele可见时点击click_ele
                    check_ele: ".ContentItem-expandButton",
                    click_ele: ".ContentItem-expandButton",
                },

            ]
        },
        {
            // 匹配网站
            site: "wap.eastmoney.com",
            // 持续执行时间(秒)小于0代表永久执行
            exec_duration: 5,
            // 移除元素列表(默认为 jquery 选择器)
            remove_elements: [
                // 上方打开app
                "#IndexDT",

                // 上方app下载
                ".appxz",

                // 主页底部按钮
                "#openinapp",
                ".open-inapp",

                // 顶部推荐
                "#swiper-ad",
                // 导航栏
                // ".comm-nav",
                ".emwapas_dtw",
                ".btn-comm-more",
            ],
            // 自动点击列表
            auto_click: [
                // 点击阅读更多
                {
                    // 当check_ele可见时点击click_ele
                    check_ele: ".fold-btn",
                    click_ele: ".fold-btn",
                },
                {
                    // 当check_ele可见时点击click_ele
                    check_ele: ".cancel",
                    click_ele: ".cancel",
                },
                // 跳过推荐下载app
                {
                    // 当check_ele可见时点击click_ele
                    check_ele: "#go-wap-top",
                    click_ele: "#go-wap-top",
                },

            ],
            // 自定义执行
            custom_eval: `
                for(;;){
                    let ele = jq(".comm-nav")
                    // 判断是否存在
                    if(undefined==ele){
                        break
                    }

                    if(ele.css("top")!=0){
                        ele.css("top",0);
                    }

                    ele = jq("body")
                    // 判断是否存在
                    if(undefined==ele){
                        break
                    }

                    if(ele.css("padding-top")!=0){
                        ele.css("padding-top",0);
                    }   
                    break                 
                }

                `
            ,
        },
        {
            // 匹配网站
            site: "m.ixigua.com",
            // 持续执行时间(秒)小于0代表永久执行
            exec_duration: -1,
            // 移除元素列表(默认为 jquery 选择器)
            remove_elements: [],
            // 隐藏元素列表(有些网站移除会提示错误)
            hide_elements: [
                // 右上方打开app
                ".xigua-bar-publish-container",

                // 底部推荐下载app
                ".xigua-download",

                // 播放页底部
                ".xigua-guide-button",

                //
                ".xigua-comment-more",
            ],
            // 自动点击列表
            auto_click: [
                // 点击阅读更多
                {
                    // 当check_ele可见时点击click_ele
                    check_ele: ".button.platter",
                    click_ele: ".button.platter",
                },
                {
                    // 当check_ele可见时点击click_ele
                    check_ele: ".banner_title__continue",
                    click_ele: ".banner_title__continue",
                },

            ],
        },
        {
            // 匹配网站
            site: "youku.com",
            // 持续执行时间(秒)小于0代表永久执行
            exec_duration: 5,
            // 移除元素列表(默认为 jquery 选择器)
            remove_elements: [],
            // 隐藏元素列表(有些网站移除会提示错误)
            hide_elements: [
                // 右上方打开app
                ".icon.downloadApp",

                "#download_btn",

                // 播放页下方
                ".clipboard.h5-detail-guide",

                // 底部下载按钮
                ".callEnd_fixed_box",
            ],
            // 自动点击列表
            auto_click: [
            ],
        },
    ]


    // 获取jquery对象(无冲突)
    let jq = jQuery.noConflict(true);

    // 设置全局变量
    let console_info_prefix = "移除打开App提示: "


    // 打印信息
    function console_info(info) {
        console.info(console_info_prefix + info)
    }


    // 根据当前网站链接地址获取网站匹配规则
    function get_current_site_db() {
        let current_url = window.location.href

        // console_info("当前网站地址:" + current_url)

        // 遍历所有网站匹配规则
        for (let index = 0; index < site_db.length; index++) {
            let site = site_db[index].site

            // 正则表达式匹配
            if (current_url.match(site) != null) {
                console_info("匹配到网站规则:" + site)
                return site_db[index]
            }
        }
        console_info("没有匹配到网站规则")
    }

    // 获取当前网站数据信息
    let current_site_db = get_current_site_db()

    // 隐藏网站元素
    function do_site_hide_elements() {
        let elements = current_site_db.hide_elements

        // 判断是否设置当前键值
        if (elements == undefined) {
            return
        }

        for (let index = 0; index < elements.length; index++) {
            let ele = jq(elements[index])
            // 判断元素是否存在
            if (ele != undefined) {
                // 判断元素是否可见
                if (ele.is(":visible")) {
                    ele.hide()
                }
            }
        }
    }

    // 移除网站元素
    function do_site_remove_elements() {
        let elements = current_site_db.remove_elements

        // 判断是否设置当前键值
        if (elements == undefined) {
            return
        }

        for (let index = 0; index < elements.length; index++) {
            let ele = jq(elements[index])
            // 判断元素是否存在
            if (ele != undefined) {
                // 移除
                ele.remove()
            }
        }
    }

    // 自动点击网站元素
    function do_site_auto_click() {
        let elements = current_site_db.auto_click

        // 判断是否设置当前键值
        if (elements == undefined) {
            return
        }

        for (let index = 0; index < elements.length; index++) {
            let check_element = jq(elements[index].check_ele)
            let click_element = jq(elements[index].click_ele)

            // 判断元素是否存在
            if (undefined == check_element) {
                continue
            }

            // 如果元素不可见
            if (!check_element.is(":visible")) {
                continue
            }

            // 判断元素是否存在
            if (undefined == click_element) {
                continue
            }

            // 特殊处理a标签
            if (click_element.is('a')) {
                click_element = click_element[0]
            }

            // 点击元素
            click_element.click()
        }
    }

    // 执行自定义命令
    function do_site_custom_eval() {
        let custom_eval = current_site_db.custom_eval

        // 判断是否设置当前键值
        if (custom_eval == undefined) {
            return
        }

        eval(custom_eval)
    }

    // 设置属性
    function do_site_set_attr() {
        let elements = current_site_db.set_attr

        // 判断是否设置当前键值
        if (elements == undefined) {
            return
        }

        for (let index = 0; index < elements.length; index++) {
            let ele = jq(elements[index].ele)
            // 判断元素是否存在
            if (undefined == ele) {
                continue
            }

            // 判断当前属性值是否与设定属性值一致
            let attr = elements[index].attr
            let value = elements[index].value

            // 如果与设定属性值一致
            if (ele.attr(attr) == value) {
                continue
            }

            // 设置
            ele.attr(attr, value)
        }
    }

    function main() {
        // 未匹配到网站
        if (undefined == current_site_db) {
            return
        }

        // 执行间隔
        let interval_time = 250

        // 获取当前时间戳(秒)
        let current_time = new Date().getTime()

        // 结束时间点
        let final_time = current_time + current_site_db.exec_duration * 10 ** 3

        // 设置定时器
        let interval = setInterval(function () {
            // 移除元素、自动点击
            do_site_hide_elements()
            do_site_remove_elements()
            do_site_auto_click()
            do_site_set_attr()
            do_site_custom_eval()

            // 永久执行
            if (current_site_db.exec_duration < 0) {
                return
            }

            // 判断当前时间是否超过设定时间
            current_time = new Date().getTime()

            if (current_time > final_time) {
                clearInterval(interval)
                console_info("执行完成")
            }
        }, interval_time);
    }

    // 执行主函数
    main()
    // jq(document).ready(function () {
    //     // 执行主函数
    //     main()
    // })
})();