Greasy Fork

来自缓存

Greasy Fork is available in English.

自适应宽度脚本2

自动将页面宽度调整为适合屏幕大小的宽度

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         自适应宽度脚本2
// @version      2
// @description  自动将页面宽度调整为适合屏幕大小的宽度
// @match        *://*/*
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_notification
// @namespace http://greasyfork.icu/users/13961
// ==/UserScript==
(function() {
    var SCROLLBAR_ADJUST = 16; // 滚动条宽度的调整值
    var isFit = GM_getValue('isFit', true); // 是否启用自适应宽度
    function addPreWrapCSS() {
        var style = document.createElement('style');
        style.innerHTML = 'pre { white-space: pre-wrap; }';
        document.head.appendChild(style);
    }
    function iter(elems, f) {
        for (var i = 0; i < elems.length; i++) {
            var e = elems[i];
            if (f(e)) {
                // 处理 e 元素
            }
        }
    }
    function fit() {
        addPreWrapCSS();
        var elements = document.querySelectorAll('*');
        iter(elements, function(e) {
            if (e.tagName === 'PRE') {
                e.style.maxWidth = 'none';
            }
            if (e.offsetWidth > window.innerWidth - SCROLLBAR_ADJUST) {
                e.style.width = '100%';
                e.style.boxSizing = 'border-box';
            } else {
                e.style.width = 'auto';
            }
        });
    }
    function applyFit() {
        isFit = !isFit;
        GM_setValue('isFit', isFit);
        GM_notification('自适应宽度状态已更新:' + (isFit ? '开启' : '关闭'));
        window.postMessage({ cmd: 'toggle', fit: isFit }, '*');
        fit();
    }
    function processMessage(event) {
        if (event.data.cmd === 'toggle') {
            applyFit();
        }
    }
    window.addEventListener('resize', function() {
        if (isFit) {
            fit();
        }
    });
    window.addEventListener('message', processMessage, false);
    if (isFit) {
        fit();
    }
       // 监听查看全部回答按钮的点击事件
    var btn = document.querySelector('.QuestionMainAction');
    if (btn) {
        btn.addEventListener('click', function() {
            // 等待回答内容加载完成后再执行自适应宽度
            setTimeout(fit, 1000);
        });
    }
})();