|
1 | 1 | // ==UserScript==
|
2 | 2 | // @name 【移动端】bilibili优化
|
3 | 3 | // @namespace https://github.com/WhiteSevs/TamperMonkeyScript
|
4 |
| -// @version 2025.5.2 |
| 4 | +// @version 2025.5.6 |
5 | 5 | // @author WhiteSevs
|
6 | 6 | // @description 阻止跳转App、App端推荐视频流、解锁视频画质(番剧解锁需配合其它插件)、美化显示、去广告等
|
7 | 7 | // @license GPL-3.0-only
|
|
2046 | 2046 | true,
|
2047 | 2047 | void 0,
|
2048 | 2048 | "一般用于处理楼层的回复弹窗内无法选中复制问题"
|
2049 |
| - ), |
2050 |
| - UISwitch( |
2051 |
| - "跳过【观看高清流畅视频】弹窗", |
2052 |
| - "bili-close-wake-app-dialog", |
2053 |
| - true, |
2054 |
| - void 0, |
2055 |
| - "监听页面加载并关闭该弹窗" |
2056 | 2049 | )
|
2057 | 2050 | // UISwitch(
|
2058 | 2051 | // "自动删除Cookie buvid3",
|
|
2134 | 2127 | void 0,
|
2135 | 2128 | "覆盖bili-open-app/m-open-app元素上的opener.open函数,可阻止点击唤醒/下载App,如果存在有效链接,会自动跳转"
|
2136 | 2129 | ),
|
| 2130 | + UISwitch( |
| 2131 | + "覆盖.wx-tag的handleClick", |
| 2132 | + "bili-cover-wx-tag-handleClick", |
| 2133 | + true, |
| 2134 | + void 0, |
| 2135 | + "覆盖.wx-tag元素上的点击事件,让它直接打开视频" |
| 2136 | + ), |
2137 | 2137 | UISwitch(
|
2138 | 2138 | "劫持setTimeout-autoOpenApp",
|
2139 | 2139 | "bili-hookSetTimeout_autoOpenApp",
|
|
12591 | 12591 | windowPlayerAgent: false,
|
12592 | 12592 | hookWebpackJsonp_openApp: false,
|
12593 | 12593 | overRideLaunchAppBtn_Vue_openApp: false,
|
12594 |
| - overRideBiliOpenApp: false |
| 12594 | + overRideBiliOpenApp: false, |
| 12595 | + overRideWxTaghandleClick: false |
12595 | 12596 | },
|
12596 | 12597 | $data: {
|
12597 | 12598 | setTimeout: []
|
|
12679 | 12680 | childList: true,
|
12680 | 12681 | attributes: true
|
12681 | 12682 | },
|
| 12683 | + immediate: true, |
12682 | 12684 | callback() {
|
12683 | 12685 | document.querySelectorAll(".launch-app-btn").forEach(($launchAppBtn) => {
|
12684 | 12686 | let vueObj = VueUtils.getVue($launchAppBtn);
|
|
12711 | 12713 | childList: true,
|
12712 | 12714 | attributes: true
|
12713 | 12715 | },
|
| 12716 | + immediate: true, |
12714 | 12717 | callback() {
|
12715 | 12718 | [
|
12716 | 12719 | ...Array.from($$("bili-open-app")),
|
|
12738 | 12741 | });
|
12739 | 12742 | }
|
12740 | 12743 | });
|
| 12744 | + }, |
| 12745 | + /** |
| 12746 | + * 覆盖页面上的className为wx-tag的元素的点击事件 |
| 12747 | + */ |
| 12748 | + overRideWxTaghandleClick() { |
| 12749 | + if (this.$isHook.overRideWxTaghandleClick) { |
| 12750 | + return; |
| 12751 | + } |
| 12752 | + this.$isHook.overRideWxTaghandleClick = true; |
| 12753 | + utils.mutationObserver(document, { |
| 12754 | + config: { |
| 12755 | + subtree: true, |
| 12756 | + childList: true, |
| 12757 | + attributes: true |
| 12758 | + }, |
| 12759 | + immediate: true, |
| 12760 | + callback() { |
| 12761 | + [...Array.from($$(".wx-tag"))].forEach(($el) => { |
| 12762 | + if ($el.hasAttribute("data-inject-vueins-handle-click")) { |
| 12763 | + return; |
| 12764 | + } |
| 12765 | + let vueIns = VueUtils.getVue($el); |
| 12766 | + if (vueIns) { |
| 12767 | + if (typeof (vueIns == null ? void 0 : vueIns.handleClick) === "function") { |
| 12768 | + vueIns.handleClick = function() { |
| 12769 | + if (typeof vueIns["goToVideo"] === "function") { |
| 12770 | + vueIns.goToVideo(); |
| 12771 | + } else { |
| 12772 | + Qmsg.error(".wx-tag不存在goToVideo函数", { |
| 12773 | + consoleLogContent: true |
| 12774 | + }); |
| 12775 | + } |
| 12776 | + }; |
| 12777 | + $el.setAttribute("data-inject-vueins-handle-click", "true"); |
| 12778 | + } |
| 12779 | + if (Array.isArray(vueIns == null ? void 0 : vueIns.$children) && vueIns.$children.length && typeof vueIns.$children[0].handleClick === "function") { |
| 12780 | + vueIns.$children[0].handleClick = vueIns.handleClick; |
| 12781 | + } |
| 12782 | + } |
| 12783 | + }); |
| 12784 | + } |
| 12785 | + }); |
12741 | 12786 | }
|
12742 | 12787 | };
|
12743 | 12788 | const BilibiliRecommendCSS = '#app .m-head .m-recommend-view {\r\n display: none;\r\n}\r\n\r\n#app\r\n .m-head\r\n .suspension\r\n .channel-menu:has(.recommend-tag.is-avtive)\r\n .v-switcher__header__anchor {\r\n display: none !important;\r\n}\r\n#app\r\n .m-head\r\n .suspension\r\n .channel-menu:has(.recommend-tag.is-avtive)\r\n a.v-switcher__header__tabs__item {\r\n color: #505050 !important;\r\n}\r\n#app\r\n .m-head\r\n .suspension\r\n .channel-menu:has(.recommend-tag.is-avtive)\r\n a.recommend-tag {\r\n color: var(--bili-color) !important;\r\n}\r\n#app\r\n .m-head\r\n .suspension\r\n .channel-menu:has(.recommend-tag.is-avtive)\r\n a.recommend-tag\r\n span:after {\r\n content: " ";\r\n position: relative;\r\n background: var(--bili-color);\r\n width: 30.4375px;\r\n height: 0.53333vmin;\r\n display: block;\r\n bottom: 3px;\r\n}\r\n\r\n#app .m-head:has(.recommend-tag.is-avtive) .suspension + div {\r\n display: none;\r\n}\r\n#app .m-head:has(.recommend-tag.is-avtive) .m-recommend-view {\r\n display: unset;\r\n}\r\n\r\n#app .m-head .m-recommend-view {\r\n background-color: #f0f1f3;\r\n}\r\n#app .m-head .m-recommend-view .list-view .video-list-box .video-list {\r\n padding: 0 1.33333vmin;\r\n margin-bottom: 5.33333vmin;\r\n}\r\n#app\r\n .m-head\r\n .m-recommend-view\r\n .list-view\r\n .video-list-box\r\n .video-list\r\n .card-box {\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -ms-flex-wrap: wrap;\r\n flex-wrap: wrap;\r\n}\r\n#app\r\n .m-head\r\n .m-recommend-view\r\n .list-view\r\n .video-list-box\r\n .video-list\r\n .card-box\r\n .v-card\r\n .card {\r\n position: relative;\r\n}\r\n#app\r\n .m-head\r\n .m-recommend-view\r\n .list-view\r\n .video-list-box\r\n .video-list\r\n .card-box\r\n .v-card\r\n .card\r\n .bfs-img-wrap {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n overflow: hidden;\r\n}\r\n#app\r\n .m-head\r\n .m-recommend-view\r\n .list-view\r\n .video-list-box\r\n .video-list\r\n .card-box\r\n .v-card\r\n .card\r\n .bfs-img-wrap\r\n .bfs-img.b-img {\r\n position: relative;\r\n width: 100%;\r\n height: 100%;\r\n overflow: hidden;\r\n background: transparent;\r\n}\r\n#app\r\n .m-head\r\n .m-recommend-view\r\n .list-view\r\n .video-list-box\r\n .video-list\r\n .card-box\r\n .v-card\r\n .card\r\n .bfs-img-wrap\r\n .bfs-img.b-img\r\n picture.b-img__inner {\r\n display: block;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n#app\r\n .m-head\r\n .m-recommend-view\r\n .list-view\r\n .video-list-box\r\n .video-list\r\n .card-box\r\n .v-card\r\n .card\r\n .bfs-img-wrap\r\n .bfs-img.b-img\r\n picture.b-img__inner\r\n img {\r\n width: 100%;\r\n height: 100%;\r\n -o-object-fit: cover;\r\n object-fit: cover;\r\n}\r\n#app\r\n .m-head\r\n .m-recommend-view\r\n .list-view\r\n .video-list-box\r\n .video-list\r\n .card-box\r\n .v-card\r\n .card\r\n .count {\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n width: 100%;\r\n font-size: 3.2vmin;\r\n padding: 1.33333vmin 1.6vmin;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-pack: justify;\r\n -ms-flex-pack: justify;\r\n justify-content: space-between;\r\n color: #fff;\r\n background: linear-gradient(0deg, rgba(0, 0, 0, 0.85), transparent);\r\n}\r\n#app\r\n .m-head\r\n .m-recommend-view\r\n .list-view\r\n .video-list-box\r\n .video-list\r\n .card-box\r\n .v-card\r\n .title {\r\n font-size: 3.2vmin;\r\n color: #212121;\r\n margin-top: 1.6vmin;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n display: -webkit-box;\r\n -webkit-line-clamp: 2;\r\n -webkit-box-orient: vertical;\r\n}\r\n#app\r\n .m-head\r\n .m-recommend-view\r\n .list-view\r\n .video-list-box\r\n .video-list\r\n .card-box\r\n .v-card\r\n .gm-up-info\r\n .gm-up-name\r\n .gm-picture-text {\r\n padding: 1px 4px;\r\n border: 1px solid var(--bili-color);\r\n color: var(--bili-color);\r\n border-radius: 2px;\r\n margin-right: 4px;\r\n font-size: 2vmin;\r\n}\r\n\r\n#app\r\n .m-head\r\n .m-recommend-view\r\n .list-view\r\n .video-list-box\r\n .video-list\r\n .card-box\r\n .v-card\r\n .count\r\n > span {\r\n display: flex;\r\n align-items: center;\r\n gap: 1.33333vmin;\r\n}\r\n';
|
|
14606 | 14651 | log.info(`覆盖元素bili-open-app上的opener.open`);
|
14607 | 14652 | BilibiliHook.overRideBiliOpenApp();
|
14608 | 14653 | });
|
| 14654 | + PopsPanel.execMenuOnce("bili-cover-wx-tag-handleClick", () => { |
| 14655 | + log.info(`覆盖元素.wx-tag的handleClick函数`); |
| 14656 | + BilibiliHook.overRideWxTaghandleClick(); |
| 14657 | + }); |
14609 | 14658 | PopsPanel.execMenuOnce("bili-head-beautify", () => {
|
14610 | 14659 | log.info("添加美化CSS");
|
14611 | 14660 | return addStyle(BilibiliBeautifyCSS);
|
|
14649 | 14698 | log.error("该Router暂未适配,可能是首页之类:" + window.location.href);
|
14650 | 14699 | }
|
14651 | 14700 | domutils.ready(() => {
|
14652 |
| - PopsPanel.execMenuOnce("bili-close-wake-app-dialog", () => { |
14653 |
| - return this.watchCloseWakeAppDialog(); |
14654 |
| - }); |
14655 | 14701 | });
|
14656 | 14702 | },
|
14657 | 14703 | /**
|
|
14731 | 14777 | );
|
14732 | 14778 | }
|
14733 | 14779 | });
|
14734 |
| - }, |
14735 |
| - /** |
14736 |
| - * 自动观察并关闭 观看高清流畅视频 的弹窗 |
14737 |
| - */ |
14738 |
| - watchCloseWakeAppDialog() { |
14739 |
| - log.info(`自动观察并关闭 观看高清流畅视频 的弹窗`); |
14740 |
| - let lockFn = new utils.LockFunction(() => { |
14741 |
| - let $dialog = $(".v-dialog"); |
14742 |
| - if ($dialog && domutils.text($dialog).includes("观看高清流畅视频")) { |
14743 |
| - let $iconClose = $dialog.querySelector(".icon-close") || $dialog.querySelector(".btn.cancel"); |
14744 |
| - if ($iconClose) { |
14745 |
| - $iconClose.click(); |
14746 |
| - log.success(`出现【观看高清流畅视频】弹窗,关闭成功!`); |
14747 |
| - } else { |
14748 |
| - log.error($dialog); |
14749 |
| - Qmsg.error("【观看高清流畅视频】弹窗关闭失败", { |
14750 |
| - consoleLogContent: true |
14751 |
| - }); |
14752 |
| - } |
14753 |
| - } |
14754 |
| - }); |
14755 |
| - utils.mutationObserver(document, { |
14756 |
| - config: { |
14757 |
| - subtree: true, |
14758 |
| - childList: true |
14759 |
| - }, |
14760 |
| - immediate: true, |
14761 |
| - callback: () => { |
14762 |
| - lockFn.run(); |
14763 |
| - } |
14764 |
| - }); |
14765 |
| - return CommonUtil.addBlockCSS( |
14766 |
| - ".open-app-dialog.v-dialog", |
14767 |
| - ".v-dialog:has(m-open-app)" |
14768 |
| - ); |
14769 | 14780 | }
|
14770 | 14781 | };
|
14771 | 14782 | PopsPanel.init();
|
|
0 commit comments