v Fork

  • /*
     * @title v
     * @description dumb jump to bottom of page; [Ctrl +] End alternatives
     * @include http://*
     * @include https://*
     * @license MIT License https://opensource.org/licenses/MIT
     * @javascript_url
     */
    
    // via
    // https://hail2u.net/blog/coding/window-scrollto-infinity-infinity.html
    
    // TBD simulate End key press
    
    /* for mobile and legacy browsers
    javascript:window.scrollTo(0,Math.max.apply(null,[document.documentElement.scrollHeight,document.documentElement.clientHeight,document.body.scrollHeight,document.body.clientHeight]))
    javascript:window.scrollTo(0,Number.MAX_SAFE_INTEGER)
    javascript:window.scrollTo(0,Number.MAX_VALUE)
    */
    
    // avoid Magic Number e.g.
    // 99999..., 10000... and 1e100...
    (() => {
        'use strict';
    
        //*/ boring...
        window.scrollTo(0, Math.max(...[
            document.documentElement.scrollHeight,
            document.documentElement.clientHeight,
            document.body.scrollHeight,
            document.body.clientHeight,
        ]));
        /*/
        window.scrollTo(0, Number.MAX_SAFE_INTEGER || Infinity);
        // XXX `Infinity` is fallback/workaround for IE (might be fixed) c.f.
        //     https://hail2u.net/blog/coding/window-scrollto-infinity-infinity.html
        //     https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER
        //
        //     You can use `Number.MAX_VALUE` BUT exponential;
        //     so hard to try decimalization before truncate c.f.
        //     https://stackoverflow.com/questions/18719775/parsing-and-converting-exponential-values-to-decimal-in-javascript
        //
        // FIXME `Number.MAX_SAFE_INTEGER` methods do not working on Firefox 58.0.2 Desktop
        //       expected scroll to bottom, but actual scroll to top; like this
        //            window.scrollTo(0, 0)
        //       perhaps Fx treated like a "finite values", `NaN` and +/-`Infinity` c.f.
        //       https://www.w3.org/TR/cssom-view/#dom-window-scroll
        //       https://www.w3.org/TR/cssom-view/#normalize-non-finite-values
        //       https://www.w3.org/TR/cssom-view/#webidl-values
        //
        //       scrollTo restricted from 32-bit limit?
        //
        //       Firefox 58.0.2 mobile works fine
        //       `Number.MAX_SAFE_INTEGER`, `Number.MAX_VALUE` and `1e100` (!)
        //*/
    })();
    
    // DBG
    // window.scrollTo() w/ constants X-Browser
    //
    // - Chromium         64.0.3282.167     32-bit arch
    // - Firefox          58.0.2            32-bit arch
    // - Edge mobile      1.0.0.1656 Blink  64-bit arch
    // - Firefox mobile   58.0.2            64-bit arch
    //
    //
    // Browser Compatibility Table
    //
    // [x] works
    // [ ] like a finite, treated to `0`
    // [-] not check yet
    //
    // | Browser      | height | MAX_SAFE_INTEGER | MAX_VALUE | exponential | hex |
    // |--------------|--------|------------------|-----------|-------------|-----|
    // | Chromium     | [x]    | [x]              | [ ]       | [ ]         | [x] |
    // | Firefox      | [x]    | [ ]              | [ ]       | [ ]         | [x] |
    // | Edge mobi    | [x]    | [x]              | [ ]       | [ ]         | [-] |
    // | Firefox mobi | [x]    | [x]              | [x]       | [x]         | [-] |
    //
    //  exponential: 1e100
    //  hex: 0xFFFFFFF  (< signed 32-bit limit)
    //
    //
    // IEEE 754[-2008] c.f.
    // https://en.wikipedia.org/wiki/IEEE_754
    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger
    //
    // Number.MAX_SAFE_INTEGER          // 9007199254740991
    // Number.MAX_SAFE_INTEGER
    // .toPrecision(16)                 // 9007199254740991
    // 2 ** 53 - 1                      // 9007199254740991
    // Number.MAX_VALUE                 // 1.7976931348623157e+308
    //
    //
    // MAX_VALUE truncates
    //
    // bitwise op 32-bit signed number c.f.
    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Signed_32-bit_integers
    // Math.pow(2, 32 -1)               // 2147483648
    //
    // Number.MAX_VALUE | 0             // 0
    // ~~Number.MAX_VALUE               // 0
    // parseInt(Number.MAX_VALUE, 10)   // 1
    // Math.trunc(Number.MAX_VALUE)     // 1.7976931348623157e+308
    //
    //
    // Hex playing
    //
    // Number(0xFFFFFFFFFFFFFFFFF)      // 295147905179352830000
    // Number(0xFFFFFFFFFFFFFFFFF0)     // 4.722366482869645e+21
    //
    // Chromium works
    // window.scroll(0, '0x'.padEnd(Number.MAX_SAFE_INTEGER.toString().length, 'F'))
    //
    // Firefox works limit
    // window.scrollTo(0, 0xFFFFFFF)    // 268435455
    // 2 ** 32 - 1                      // 2147483648
    // window.scrollTo(0, 0xFFFFFFF0)   // 4294967280
    
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。