就要宽屏

为多个视频网站提供自动宽屏效果,支持91porny、hsex.men、91pinse等

As of 2025-06-17. See the latest version.

// ==UserScript==
// @name         就要宽屏
// @namespace    https://t.me/aibiancheng
// @version      0.1
// @description  为多个视频网站提供自动宽屏效果,支持91porny、hsex.men、91pinse等
// @author       星宿老魔
// @match        https://91porny.com/video/view/*
// @match        https://91porny.com/video/viewhd/*
// @match        https://hsex.men/video-*
// @match        https://91pinse.com/v/*
// @match        https://91pinse.com/vhd/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=91porny.com
// @license MIT
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // 获取当前网站域名
    const currentDomain = window.location.hostname;
    
    // 网站配置对象
    const siteConfigs = {
        '91porny.com': {
            selectors: {
                videoContainer: '.videoPlayContainer',
                videoElement: '.video-js',
                videoRow: '.row',
                videoColumn: '.left.col-60.offset-md-10.col-md-40, .left.col-md-40.offset-md-10.col-60',
                controlBar: '.vjs-control-bar',
                sideContent: '.row .side.col-40.col-md-50',
                scaleElement: '.scale'
            },
            applyStyles: function() {
                const videoColumn = document.querySelector(this.selectors.videoColumn);
                if (videoColumn) {
                    videoColumn.style.width = '100%';
                    videoColumn.style.maxWidth = '100%';
                    videoColumn.style.flexBasis = '100%';
                    videoColumn.style.margin = '0';
                    videoColumn.style.padding = '0 10px';
                    videoColumn.style.marginTop = '0';
                    videoColumn.style.paddingTop = '0';
                    videoColumn.classList.remove('col-60', 'offset-md-10', 'col-md-40');
                    videoColumn.classList.add('col-100');
                }
                
                const videoRow = document.querySelector(this.selectors.videoRow);
                if (videoRow) {
                    videoRow.style.marginTop = '0';
                    videoRow.style.paddingTop = '0';
                }
                
                const scaleElement = document.querySelector(this.selectors.scaleElement);
                if (scaleElement) {
                    scaleElement.style.paddingBottom = '0';
                    scaleElement.style.height = 'auto';
                    scaleElement.style.minHeight = '0';
                    scaleElement.style.aspectRatio = 'unset';
                    scaleElement.style.marginTop = '0';
                    scaleElement.style.paddingTop = '0';
                }
                
                const videoContainer = document.querySelector(this.selectors.videoContainer);
                if (videoContainer) {
                    videoContainer.style.marginTop = '0';
                    videoContainer.style.paddingTop = '0';
                }
            },
            cssRules: `
                .videoPlayContainer {
                    width: 100% !important;
                    max-width: 100% !important;
                    margin: 0 auto !important;
                    margin-top: 0 !important;
                    padding-top: 0 !important;
                }
                .video-js {
                    width: 100% !important;
                    max-width: 100% !important;
                }
                .row .col-100 {
                    width: 100% !important;
                    max-width: 100% !important;
                    flex-basis: 100% !important;
                    margin: 0 !important;
                    padding: 0 10px !important;
                    margin-top: 0 !important;
                    padding-top: 0 !important;
                }
                .row {
                    margin-top: 0 !important;
                    padding-top: 0 !important;
                }
                .row .side.col-40.col-md-50 {
                    display: none;
                }
                .videoPlayContainer .scale {
                    padding-bottom: 0 !important;
                    height: auto !important;
                    min-height: 0 !important;
                    aspect-ratio: unset !important;
                    margin-top: 0 !important;
                    padding-top: 0 !important;
                }
                .videoPlayContainer .video-js {
                    position: relative !important;
                    top: 0 !important;
                    left: 0 !important;
                }
                .videoPlayContainer,
                .videoPlayContainer > *,
                .col-100 {
                    margin-top: 0 !important;
                    padding-top: 0 !important;
                }
                body .container .row:first-child {
                    margin-top: 0 !important;
                    padding-top: 0 !important;
                }
            `
        },
        
        'hsex.men': {
            selectors: {
                videoContainer: '.videos_box',
                videoElement: '.video-js',
                mainContainer: '.container',
                videoCol: '.col-md-8',
                sideCol: '.col-md-4',
                controlBar: '.vjs-control-bar',
                panelDefault: '.panel-default'
            },
            applyStyles: function() {
                const mainContainer = document.querySelector(this.selectors.mainContainer);
                const videoCol = document.querySelector(this.selectors.videoCol);
                const sideCol = document.querySelector(this.selectors.sideCol);
                
                if (mainContainer) {
                    mainContainer.style.width = '100%';
                    mainContainer.style.maxWidth = '100%';
                    mainContainer.style.padding = '0';
                }
                
                if (videoCol) {
                    videoCol.style.width = '100%';
                    videoCol.style.maxWidth = '100%';
                    videoCol.style.flexBasis = '100%';
                    videoCol.style.padding = '0 10px';
                    videoCol.classList.remove('col-md-8');
                    videoCol.classList.add('col-md-12');
                }
                
                if (sideCol) {
                    sideCol.style.display = 'none';
                }
                
                // 确保控制栏始终在视频下方
                const controlBar = document.querySelector(this.selectors.controlBar);
                if (controlBar) {
                    controlBar.style.position = 'relative';
                    controlBar.style.bottom = '0';
                    controlBar.style.zIndex = '10';
                    controlBar.style.clear = 'both';
                }
                
                // 确保面板始终在视频下方
                const panelDefault = document.querySelector(this.selectors.panelDefault);
                if (panelDefault) {
                    panelDefault.style.position = 'relative';
                    panelDefault.style.clear = 'both';
                    panelDefault.style.marginTop = '15px';
                    panelDefault.style.zIndex = '1';
                }
            },
            cssRules: `
                .container {
                    width: 100% !important;
                    max-width: 100% !important;
                    padding: 0 !important;
                }
                .videos_box {
                    width: 100% !important;
                    max-width: 100% !important;
                    margin: 0 auto !important;
                    position: relative !important;
                    z-index: 5 !important;
                }
                .video-js {
                    width: 100% !important;
                    max-width: 100% !important;
                    position: relative !important;
                    z-index: 5 !important;
                }
                .col-md-12 {
                    width: 100% !important;
                    max-width: 100% !important;
                    flex-basis: 100% !important;
                    padding: 0 10px !important;
                }
                /* 确保控制栏不会上移遮挡视频 */
                .vjs-control-bar {
                    position: relative !important;
                    bottom: 0 !important;
                    z-index: 10 !important;
                    clear: both !important;
                    width: 100% !important;
                }
                /* 确保面板不会上移遮挡视频 */
                .panel-default {
                    position: relative !important;
                    clear: both !important;
                    margin-top: 15px !important;
                    z-index: 1 !important;
                    width: 100% !important;
                    float: none !important;
                }
                /* 防止浮动元素影响布局 */
                .col-md-12:after {
                    content: "" !important;
                    display: table !important;
                    clear: both !important;
                }
                .thumbnail {
                    margin-bottom: 15px;
                }
                /* 确保视频区域有足够的垂直空间 */
                .videos_box,
                .video-js {
                    min-height: 200px !important;
                }
            `
        },
        
        '91pinse.com': {
            selectors: {
                videoContainer: '.video-container',
                videoIframe: '#videoIframe',
                mainGrid: '.grid.grid-cols-1.lg\\:grid-cols-3.gap-6',
                mainCol: '.lg\\:col-span-2'
            },
            applyStyles: function() {
                const mainGrid = document.querySelector('.grid.grid-cols-1.lg\\:grid-cols-3.gap-6');
                const mainCol = document.querySelector('.lg\\:col-span-2');
                
                if (mainGrid) {
                    mainGrid.classList.remove('grid-cols-1', 'lg:grid-cols-3');
                    mainGrid.classList.add('grid-cols-1');
                    mainGrid.style.maxWidth = '100%';
                }
                
                if (mainCol) {
                    mainCol.classList.remove('lg:col-span-2');
                    mainCol.style.width = '100%';
                    mainCol.style.maxWidth = '100%';
                }
            },
            cssRules: `
                .video-container {
                    width: 100% !important;
                    max-width: 100% !important;
                    margin: 0 auto !important;
                    background-color: #000 !important;
                }
                #videoIframe {
                    width: 100% !important;
                    aspect-ratio: 16/9 !important;
                    max-height: 85vh !important;
                }
                .grid.grid-cols-1 {
                    width: 100% !important;
                    max-width: 100% !important;
                }
                .text-xl.md\\:text-2xl.font-bold.p-4 {
                    text-align: center !important;
                }
                .grid.grid-cols-2.md\\:grid-cols-3.gap-4 {
                    grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)) !important;
                }
                @media (min-width: 1400px) {
                    .video-container {
                        max-width: 85% !important;
                    }
                    .lg\\:col-span-2 {
                        margin: 0 auto !important;
                        max-width: 85% !important;
                    }
                }
                body {
                    background-color: #121212 !important;
                }
                .bg-base-100 {
                    background-color: #1a1a1a !important;
                }
                .shadow-lg {
                    box-shadow: 0 4px 6px rgba(0,0,0,0.2) !important;
                }
            `
        }
    };

    // 获取当前网站配置
    const currentConfig = siteConfigs[currentDomain];
    
    if (!currentConfig) {
        console.log('通用宽屏模式: 当前网站不在支持列表中');
        return;
    }

    // 主函数,设置视频为宽屏模式
    function setWideScreenMode() {
        const config = currentConfig;
        const videoContainer = document.querySelector(config.selectors.videoContainer);
        const videoElement = document.querySelector(config.selectors.videoElement) || 
                           document.querySelector(config.selectors.videoIframe);
        
        if (!videoContainer && !videoElement) {
            console.log(`${currentDomain}宽屏模式: 未找到视频元素`);
            return;
        }

        // 应用网站特定的样式调整
        if (config.applyStyles) {
            config.applyStyles();
        }
        
        // 给视频容器应用通用样式
        if (videoContainer) {
            videoContainer.style.width = '100%';
            videoContainer.style.maxWidth = '100%';
            videoContainer.style.margin = '0 auto';
            videoContainer.style.position = 'relative';
            
            // 为91pinse特殊处理大屏幕显示器
            if (currentDomain === '91pinse.com' && window.innerWidth > 1600) {
                const maxWidth = window.innerWidth * 0.85;
                videoContainer.style.maxWidth = maxWidth + 'px';
                videoContainer.style.margin = '0 auto';
            }
        }
        
        // 设置视频元素
        if (videoElement) {
            const aspectRatio = 16/9;
            
            if (currentDomain === '91pinse.com') {
                // 91pinse使用iframe
                videoElement.style.width = '100%';
                videoElement.style.height = 'auto';
                videoElement.style.aspectRatio = `${aspectRatio}`;
                videoElement.style.maxHeight = '85vh';
            } else {
                // 其他网站使用video-js
                const containerWidth = videoContainer ? videoContainer.offsetWidth : window.innerWidth;
                const videoHeight = containerWidth / aspectRatio;
                
                videoElement.style.height = `${videoHeight}px`;
                videoElement.style.width = '100%';
                videoElement.style.maxWidth = '100%';
            }
        }
        
        // 设置视频控制栏样式
        if (config.selectors.controlBar) {
            const controlBar = document.querySelector(config.selectors.controlBar);
            if (controlBar) {
                controlBar.style.width = '100%';
            }
        }
        
        console.log(`${currentDomain}宽屏模式: 已启用宽屏模式`);
    }

    // 添加窗口大小改变事件,实现自适应
    function setupResizeListener() {
        window.addEventListener('resize', function() {
            setWideScreenMode();
        });
    }

    // 添加CSS样式
    function addStyles() {
        const styleSheet = document.createElement('style');
        styleSheet.textContent = currentConfig.cssRules;
        document.head.appendChild(styleSheet);
    }

    // 初始化函数
    function init() {
        // 添加样式
        addStyles();
        
        // 设置延迟时间(91pinse使用较短延迟)
        const delay = currentDomain === '91pinse.com' ? 200 : 500;
        
        // 等待DOM完全加载
        if (document.readyState === 'loading') {
            document.addEventListener('DOMContentLoaded', function() {
                setTimeout(function() {
                    setWideScreenMode();
                    setupResizeListener();
                }, delay);
            });
        } else {
            // 如果DOM已加载完成,直接执行
            setTimeout(function() {
                setWideScreenMode();
                setupResizeListener();
            }, delay);
        }
        
        // 监听视频加载事件
        document.addEventListener('load', function(e) {
            if (e.target.tagName === 'VIDEO' || e.target.tagName === 'IFRAME') {
                setWideScreenMode();
            }
        }, true);
        
        // 监听窗口加载事件(特别为91pinse优化)
        window.addEventListener('load', function() {
            setWideScreenMode();
        });
        
        // 监听DOM变化,确保在页面元素变化后重新应用宽屏模式
        const observer = new MutationObserver(function(mutations) {
            let shouldUpdate = false;
            mutations.forEach(function(mutation) {
                if (mutation.addedNodes.length > 0) {
                    shouldUpdate = true;
                }
            });
            if (shouldUpdate) {
                setWideScreenMode();
            }
        });
        
        observer.observe(document.body, {
            childList: true,
            subtree: true
        });
        
        console.log(`${currentDomain}宽屏模式: 已启用`);
    }

    // 执行初始化
    init();
})();