[<>]+ Fork

  • /*
     * @title [<>]+
     * @description strictly Chrome/ium well-fullscreen on LXDE or Other DE on Ubuntu
     * @include http://*
     * @include https://*
     * @contributor noromanba   http://let.hatelabo.jp/noromanba/let/hJmdkteA6YED
     * @license     MIT License https://opensource.org/licenses/MIT
     * @javascript_url
     */
    
    // ill-fullscreen c.f.
    // https://ubuntuforums.org/showthread.php?t=2244152
    // https://askubuntu.com/questions/638148/how-to-make-chrome-truly-full-screen-in-lubuntu
    // and can not fix the problem to edit ~/.config/openbox/lubuntu-rc.xml
    //
    // Fullscreen API are Living Standard yet c.f.
    // https://caniuse.com/#feat=fullscreen
    // https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API
    
    // TBD smart feature detection
    (() => {
        'use strict';
    
        class NotImplementedError extends ReferenceError { }
    
        // chaotic naming when prefixing; *Fullscreen or *FullScreen mixed c.f.
        // https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#Prefixing
    
        // `document.fullscreen()` is obsolete
        // https://developer.mozilla.org/en-US/docs/Web/API/Document/fullscreen
        // instead of `document.fullscreen()` `document.webkitIsFullScreen()`
        // https://developer.mozilla.org/en-US/docs/Web/API/DocumentOrShadowRoot/fullscreenElement
        // https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#Prefixing
        const fullscreen =
            // string feature detection for avoid Illegal invocation due to Object
            'fullscreenElement' in Document.prototype ?
            document.fullscreenElement :
            'webkitFullscreenElement' in Document.prototype ?
            document.webkitFullscreenElement :
            'webkitCurrentFullscreenElement' in Document.prototype ?
            document.webkitCurrentFullscreenElement :
            (() => { throw new NotImplementedError(); })();
    
        // https://developer.mozilla.org/en-US/docs/Web/API/Document/exitFullscreen
        // https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#Prefixing
        const exitFullscreen =
            Document.prototype.exitFullscreen ?
            document.exitFullscreen.bind(document) :
            Document.prototype.webkitExitFullscreen ?
            document.webkitExitFullscreen.bind(document) :
            Document.prototype.webkitCancelFullScreen ?
            document.webkitCancelFullScreen.bind(document) :
            (() => { throw new NotImplementedError(); })();
    
        // do not react keyboard/mouse on `html` or `head` context at few major versions e.g.
        //      Chromium  65.0.3325.181-0ubuntu0.16.04.1
        // but malfunction when `body`
        const context = [
            document.documentElement,
            document.head,
            document.body,
        ].shift();
    
        // differences between case only;  "screen" or "Screen"
        // https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullscreen
        // https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#Prefixing
        const requestFullscreen =
            Element.prototype.requestFullscreen ?
            context.requestFullscreen.bind(context) :
            Element.prototype.webkitRequestFullscreen ?
            context.webkitRequestFullscreen.bind(context) :
            Element.prototype.webkitRequestFullScreen ?
            context.webkitRequestFullScreen.bind(context) :
            (() => { throw new NotImplementedError(); })();
    
        fullscreen ? exitFullscreen() : requestFullscreen();
    })();
    
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。