Fullmet

Enables HTML5 video controls on Google Meet's in-meeting video presentation.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Fullmet
// @namespace    honami
// @version      0.06
// @description  Enables HTML5 video controls on Google Meet's in-meeting video presentation. 
// @author       lee.wp14
// @source       https://github.com/leewp14/Fullmet
// @supportURL   https://github.com/leewp14/Fullmet/issues
// @match        https://meet.google.com/*
// @grant        none
// @runat        document-body
// @noframes
// ==/UserScript==

(function() {
    'use strict';

    // global variables
    var honami_FullmetNode = null;
    var honami_FullmetInlineStyle = '';
    honami_FullmetInlineStyle += "video{pointer-events: initial !important;}";  // video
    honami_FullmetInlineStyle += ".uAzxg{pointer-events: none;} .uAzxg div{pointer-events: all;}";  // participant tooltip
    var honami_FullmetClassDelay = 2000;

    // internal variables
    var honamiInternals_debug_enabled = false;
    var honamiInternals_debug_label = '[DEBUG] leewp14/Fullmet';

    honamiInternals_debug('script started');
    honami_init();
    honami_injectStyle();
    setInterval(honami_videoNode_injectClass, honami_FullmetClassDelay);
    honamiInternals_debug('script ended');

    // functions
    function honami_init(){
        // create style element
        honamiInternals_debug('exec honami_init()');

        honami_FullmetNode = document.createElement('style');
        honami_FullmetNode.id = 'honami_FullmetNode';
        honami_FullmetNode.innerHTML = honami_FullmetInlineStyle;
        
        honamiInternals_debug('exit honami_init()');
    }

    function honami_injectStyle(){
        // inject style element
        honamiInternals_debug('exec honami_injectStyle()');
        
        if(honami_FullmetNode && document.body){
            document.body.appendChild(honami_FullmetNode);
        }

        honamiInternals_debug('exit honami_injectStyle()');
    }

    function honami_videoNode_injectClass(){
        // set 'controls' attribude to video elements
        honamiInternals_debug('exec honami_videoNode_injectClass()');
        var videoNode = document.getElementsByTagName('video');
        if(videoNode){
            for(var i = 0; i < videoNode.length; i++){
                var videoNodePointer = videoNode[i];
                if(!videoNodePointer.hasAttribute('controls')){
                    videoNodePointer.setAttribute('controls', '');
                }
            };
        }
        honamiInternals_debug('exit honami_videoNode_injectClass()');
    }

    // internal functions
    function honamiInternals_debug(type){
        // log debugging messages
        if(honamiInternals_debug_enabled){
            console.log(honamiInternals_debug_label + ': ' + type ?? 'undefined action');
        }
    }

})();