Warning: fopen(/www/sites/greasyfork.cloud/index/store/forever/d475af82685e59594920af6899a67b3b.html): failed to open stream: No space left on device in /www/sites/greasyfork.cloud/index/scriptsControl.php on line 127
Bilibili 哔哩哔哩阻止动态点击正文跳转 - 源代码

Greasy Fork

Bilibili 哔哩哔哩阻止动态点击正文跳转

阻止动态点击正文跳转动态页面

当前为 2022-03-28 提交的版本,查看 最新版本

// ==UserScript==
// @name         Bilibili 哔哩哔哩阻止动态点击正文跳转
// @icon         https://t.bilibili.com/favicon.ico
// @namespace    https://lolicon.app/
// @version      1.1.2
// @description  阻止动态点击正文跳转动态页面
// @author       Jindai Kirin
// @match        https://t.bilibili.com/*
// @match        https://space.bilibili.com/*
// @license      MIT
// @grant        GM_addStyle
// ==/UserScript==

(function () {
    'use strict';

    GM_addStyle('*:not(.bili-dyn-content__orig.reference)>.bili-dyn-content__orig__desc,.bili-dyn-content__forw__desc{cursor:unset!important}.bili-rich-text-emoji{-webkit-user-drag:none}');

    const contentClassList = ['bili-rich-text__content'];
    const skipClassList = ['bili-rich-text-module', 'bili-rich-text-link', 'bili-rich-text-topic'];

    /**
     * @param {HTMLElement} element
     * @param {string} className
     */
    const hasClass = (element, className) => element.classList.contains(className);
    /**
     * @param {HTMLElement} element
     * @param {string[]} classNameList
     */
    const hasSomeClass = (element, classNameList) => classNameList.some(className => hasClass(element, className));

    /**
     * @param {HTMLElement} element
     */
    const isContentElement = element => hasSomeClass(element, contentClassList) && !hasClass(element.parentElement, 'user-panel');
    /**
     * @param {HTMLElement} element
     */
    const isSkipElement = element => hasSomeClass(element, skipClassList);

    document.addEventListener(
        'click',
        e => {
            console.log(e);
            /** @type {HTMLElement} */
            const $el = e.target;
            // 不处理动态链接
            if (isSkipElement($el)) return;
            // 触发路径
            const path = e.composedPath();
            // 转发内容不处理,因为现在无法通过页面元素得到 dynamic id
            for (const ele of path) {
                if (ele.nodeName === 'BODY') break;
                if (hasClass(ele, 'bili-dyn-content__orig') && hasClass(ele, 'reference')) return;
            }
            // 阻止点击正文跳转到动态页面
            if (isContentElement($el) || isContentElement(path[1])) {
                e.stopPropagation();
            }
        },
        { capture: true }
    );
})();