阻止动态点击正文跳转动态页面
// ==UserScript== // @name Bilibili 哔哩哔哩阻止动态点击正文跳转 // @icon https://t.bilibili.com/favicon.ico // @namespace https://lolicon.app/ // @version 1.1.9 // @description 阻止动态点击正文跳转动态页面 // @author Jindai Kirin // @match https://t.bilibili.com/* // @match https://space.bilibili.com/* // @match https://www.bilibili.com/v/topic/detail/* // @license MIT // @grant GM_addStyle // ==/UserScript== (function () { 'use strict'; const css = ([style]) => GM_addStyle(style); css` .description.active, .bili-dyn-content__orig__desc:not( .bili-dyn-content__orig.reference .bili-dyn-content__orig__desc ), .dyn-card-opus__summary:not(.bili-dyn-content__orig.reference .dyn-card-opus__summary), .bili-dyn-content__forw__desc { cursor: unset !important; } .bili-rich-text-emoji { -webkit-user-drag: none; } .up-info-tip:hover { color: #ff85ad !important; cursor: pointer; } `; const contentSelector = [ '.bili-rich-text', '.bili-rich-text__content', '.content-full', '.content-ellipsis', '.content', ].join(','); const skipSelector = [ '.bili-rich-text__action', '.bili-rich-text-module', '.bili-rich-text-link', '.bili-rich-text-topic', '.bili-rich-text-viewpic', '.dynamic-link-hover-bg', ].join(','); /** * @param {HTMLElement} element * @param {string} className */ const hasClass = (element, className) => element.classList.contains(className); /** * @param {HTMLElement} element */ const isContentElement = element => element.matches(contentSelector) && !hasClass(element.parentElement, 'user-panel'); /** * @param {HTMLElement} element */ const isSkipElement = element => element.matches(skipSelector); /** * @param {HTMLElement} element */ const isNeedClickParentElement = element => hasClass(element, 'lottery-btn'); document.addEventListener( 'click', e => { /** @type {HTMLElement} */ const $el = e.target; // 不处理动态链接 if (isSkipElement($el)) return; // 扩大互动抽奖按钮点击范围(B站自己就没处理好,原本点 icon 是不能打开抽奖面板的) if (isNeedClickParentElement($el)) { e.stopPropagation(); e.preventDefault(); $el.parentElement.click(); return; } // 提供转发原文跳转到动态页面的方式 if (hasClass($el, 'up-info-tip')) { try { const did = $el.parentElement.parentElement.parentElement.getAttribute('data-ori-did'); if (did) window.open(`https://t.bilibili.com/${did}?tab=2`, '_blank'); } catch (e) { console.error(e); } } // 触发路径 const path = e.composedPath(); // 转发内容不处理,因为现在无法通过页面元素得到 dynamic id for (const ele of path) { if (ele.nodeName === 'BODY') break; if (ele.matches('.bili-dyn-content__orig.reference')) return; } // 阻止点击正文跳转到动态页面 if (isContentElement($el) || isContentElement(path[1])) { e.stopPropagation(); } }, { capture: true } ); })();