Greasy Fork

Greasy Fork is available in English.

AO3: Go to Comments

When clicking Comments button, jump to Comments section automatically.

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         AO3: Go to Comments
// @namespace    http://greasyfork.icu/en/users/163551-vannius
// @version      1.3
// @license      MIT
// @description  When clicking Comments button, jump to Comments section automatically.
// @author       Vannius
// @match        https://archiveofourown.org/*
// @grant        none
// ==/UserScript==

(function () {
    if (/archiveofourown\.org\/(collections\/[^/]+\/)?works\/[0-9]+/.test(window.location.href)) {
        // Get Comments/Hide Comments tags
        const commentTagTop = document.getElementById('show_comments_link_top');
        const commentTagBottom = document.getElementById('show_comments_link');
        // If there is no comment, commentTagBottom is undefined.
        // And there is no need to add go to comments feature.
        if (!commentTagBottom) return;

        const mutationObserver = new MutationObserver(mutations => {
            const commentFlag = mutations
                .map(x => x.addedNodes.length)
                .reduce((p, x) => p + x);

            if (commentFlag) {
                const sleep = msec => new Promise(resolve => setTimeout(resolve, msec));

                (async () => {
                    await sleep(1000);
                    window.location.href = "#comments_placeholder";
                })();
            }
            mutationObserver.disconnect();
        });

        // Add click event to go to #comments_placeholder
        const target = document.getElementById('comments_placeholder');
        const options = { childList: true };
        for (let commentTag of [commentTagTop, commentTagBottom]) {
            commentTag.addEventListener('click', () => {
                mutationObserver.observe(target, options);
            });
        }
    }
})();