// ==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()
// })
})();