自适应宽度脚本2

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

// ==UserScript==
// @name         自适应宽度脚本2
// @version      2
// @description  自动将页面宽度调整为适合屏幕大小的宽度
// @match        *://*/*
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_notification
// @namespace https://greasyfork.org/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);
        });
    }
})();