ING DiBa Login keepAlive

try to keep login alive... Das Script setzt die "Automatische LogOut-Funktion" der ING (ehem. DiBa) Banking Site außer Kraft. Die Seite bleibt so lange online, bis man sich selber abmeldet. Die Watchlist aktualisiert ohne Unterbrechung (Kursaktualisierung muss nicht mehr manuell angestoßen werden). Hauseigene Werbung wird ebenfalls versucht auszublenden (Angebote, Kredite etc.)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         ING DiBa Login keepAlive
// @namespace    https://*.ing-diba.*
// @version      0.8.3
// @description  try to keep login alive... Das Script setzt die "Automatische LogOut-Funktion" der ING (ehem. DiBa) Banking Site außer Kraft. Die Seite bleibt so lange online, bis man sich selber abmeldet. Die Watchlist aktualisiert ohne Unterbrechung (Kursaktualisierung muss nicht mehr manuell angestoßen werden). Hauseigene Werbung wird ebenfalls versucht auszublenden (Angebote, Kredite etc.)
// @author       Chillchef
// @include      https://wertpapiere.ing.*
// @include      https://banking.ing.*
// @XincludeX    *://*.ing.*/*
// @grantX       none
// @license      MIT
/*
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_setClipboard
// @grant        unsafeWindow
// @grant        window.close
// @grant        window.focus
// @grant        window.onurlchange
// @run-at       document-idle
*/
// ==/UserScript==

(function() {
    'use strict';
    //initEvents();

    if(window.debugOutput !== undefined)
    {
        window.debugOutput = true;
    }
    //setTimeout(function(){restoreConsole();},400);
    log("ING KeepAlive Script start:");
    log(document.location);

    var cnt = 0;
    var hBckup = new Object();
    var d = document;
    var t = 100000;
    setTimeout(function(){refreshLogin();},t);
    setTimeout(function(){refreshPopup();},t);


    var classesToHide = new Object();
    classesToHide[0] = ["ghost-account","0"];
    classesToHide[1] = ["hint sales-signals sales-signals--wide gap-top-2-lg sales-signals__teaser","0"];
    classesToHide[2] = ["hint sales-signals sales-signals--wide","0"];
    classesToHide[3] = ["modal modal--open","0"];
    classesToHide[4] = ["hint sales-signals sales-signals--wide","0"];
    classesToHide[5] = ["hint sales-signals","0"];
    classesToHide[6] = ["insight insight--ghost","0"];
    classesToHide[7] = ["insight insight--teaser","0"];
    classesToHide[8] = ["insight-modal","0"];
    classesToHide[9] = ["u-print-hidden","2"];
    classesToHide[10] = ["insight insight--slider","0"];
    classesToHide[11] = ["insight","0"];
    classesToHide[12] = ["insight insight--elevated","0"];
    classesToHide[13] = ["announcement","0"];
    classesToHide[14] = ["sh-title-arrow-box","0"];
    //classesToHide[15] = ["xxx","0"];
    //classesToHide[16] = ["xxx","0"];
    //classesToHide[17] = ["xxx","0"];
    //classesToHide[18] = ["xxx","0"];
    //classesToHide[19] = ["xxx","0"];
    //classesToHide[20] = ["xxx","0"];

    //window.addEventListener('DOMContentLoaded', sorryBro());
    //window.addEventListener('DOMContentLoaded', styleStart());
    window.addEventListener('DOMContentLoaded', TimerStart());


    function TimerStart()
    {
        setTimeout(function(){styleStart();},500);
        setTimeout(function(){sorryBro();},500);
    }


    function log(txt)
    {
        var dt = new Date();
        console.log(dt.toLocaleString()+ "." + dt.getMilliseconds() + " " + txt);
    }

    function initEvents()
    {
        log("initEvents()");

        //test1
        document.onreadystatechange = function(){
            if(document.readyState == "complete")
            {
                log("Test1: document.onreadystatechange == \"complete\"");
            }

            if(document.readyState == "interactive")
            {
                log("Test1: document.onreadystatechange == \"interactive\"");
            }
        }

        //test2
        window.addEventListener('load', function(){log("Test2: window.addEventListener load");});

        //test3
        document.addEventListener('DOMContentLoaded', function(){log("Test3: document.addEventListener DOMContentLoaded");});

    }


    function styleStart()
    {
        cnt++;
        log("styleStart() Nr." + cnt);
        editStyle("sh-page ing-diba-content-to-blur","95%");
        editStyle("content","95%");
        editStyle("isin","95%");

        btnColor();

        //Werbeeinblendungen ausblenden. Falls nicht gewünscht, einfach auskommentieren oder auf 'false' setzen!
        hideClasses(true);

        selectHandelsPlatz();


        //watchListFullNames();
    }

    function btnColor()
    {
        log("btnColor() start");
        try
        {

            var loBtn = d.getElementsByClassName("ing-sn-session-button__link")[0].nextElementSibling;
            loBtn.innerText = "Kein Auto-Logout!";

        }
        catch
        {
        }
        //d.getElementsByClassName("session")[0].style.cssText = ":hover {color: red !important; background-color: green !important;}";
        d = document;
        var c = "rgb(255, 197, 161)";
        var ho = [
            ["session","rgb(255, 98, 50)"], //rgb(255, 98, 0)
            ["ing-header",c],
            ["ing-sn-content-to-blur",c],
            ["ing-header__bottom",c],
            ["navigation-l1",c],
            ["ingde-sn-search-input","rgb(255, 222, 201)"],
            ["ing-sn-session-button__refresh","rgb(191, 73, 0)"]
        ];

        var b;
        for(var s in ho)
        {
            try
            {
                b = document.getElementsByClassName(ho[s][0]);
                b[0].style["background-color"] = ho[s][1];
                window.console.log("btnColor("+ho[s][0]+") OK");
            }
            catch(e)
            {
                window.console.log("btnColor("+ho[s][0]+") Fehler: " + e.message);
                window.console.log(b);
            }
        }
        //setTimeout(function(){btnColor();},10000);
    }

    function isWatchlist()
    {
        try
        {
            //return window.location.toString().includes("wertpapiere");
            return document.getElementsByClassName("sh-title")[0].innerText.toLowerCase().includes("watchlist");
        }
        catch
        {
            return false;
        }
    }

    function selectHandelsPlatz()
    {
        try
        {
            log("selectHandelsPlatz()");
            var tradeMask = d.getElementsByClassName("ibbr-table-cell");

            for(var x in tradeMask)
            {
                try
                {
                    if(tradeMask[x].innerHTML.toLowerCase().includes("direkthandel"))
                    {
                        log("direkthandel klick");
                        tradeMask[x].click()
                        setTimeout(function(){selectTradeOptions();},1000);
                        break;
                    }
                }
                catch
                {
                }
            }
        }
        catch
        {
        }
    }

    function selectTradeOptions()
    {
        var coboItems = d.getElementsByTagName("option");
        console.log(coboItems);
        for(var x in coboItems)
        {
            try
            {

                /*
                if(coboItems[x].getAttribute("value") === "LIMIT")
                {
                    coboItems[x].parentNode[0].click();
                    coboItems[x].selected = true;
                    //coboItems[x].setAttribute("selected","selected");
                    //coboItems[x].click();
                    console.log("Eintrag Aktiviert:");
                    console.log(coboItems[x]);
                }
                */

                if(coboItems[x].getAttribute("value") === "MAXIMAL")
                {
                    //coboItems[x].parentNode[0].click();
                    coboItems[x].selected = true;
                    //coboItems[x].setAttribute("selected","selected");
                    //coboItems[x].click();
                    console.log("Eintrag Aktiviert:");
                    console.log(coboItems[x]);
                }
            }
            catch
            {
            }
        }
    }

    function refreshLogin()
    {
        if(isWatchlist())
        {
            return;
        }

        try
        {
            //var clsn = "session__refresh"; //alt1
            //var clsn = "ing-sn-session-button__refresh"; //alt2
            //
            var clsn = "session-button__refresh-button";

            var reloadBtn = d.getElementsByClassName(clsn);
            if(reloadBtn[0])
            {
                reloadBtn[0].click();
                log(" Login-Refresh");
            }
        }
        catch(e)
        {
            //window.alert("DiBa-Script-Refresh-Fehler: " + e.message);
            log("Fehler in refreshLogin(): " + e.message + " !!!");
            console.log(e);
        }
        setTimeout(function(){refreshLogin();},t);
    }

    function refreshPopup()
    {
        try
        {
            var pId = "QuotestreamPopup";
            var p = d.getElementById(pId);
            if(p !== null)
            {
                var ph = p.clientHeight;
                if(ph > 0)
                {
                    d.getElementById("ctl00_QsPopup_Reload").click();
                    log("refreshPopup()  Watchlist Aktualisierung OK");
                }
            }
        }
        catch(e)
        {
            //window.alert("DiBa-Script-Popup-Fehler: " + e.message);
            log("Fehler in refreshPopup(): " + e.message + " !!!");
            console.log(e);
        }

        setTimeout(function(){refreshPopup();},2000);
    }

    //Falls Serverfehler "Entschuldigung!" beim LoginRefresh:
    function sorryBro()
    {
        try
        {
            var s = d.getElementsByClassName("headline")[0];
            if(s !== undefined)
            {
                log("sorryBro() Fehlersite wurde geladen.");
                console.log("innerText: '" + s.innerText + "'");
                if(s.innerText == "Entschuldigung!")
                {
                    log("sorryBro():Entschuldigung! Gehe zurück zur vorherigen Site.");
                    history.back();
                }
                else
                {
                    log("sorryBro() Fehlersite unbekannt? ");
                }
            }
        }
        catch(e)
        {
            log("sorryBro() Fehler: " + e.message);
        }
    }

    function hideClasses(hide)
    {
        for(var v in classesToHide)
        {
            hideClass(classesToHide[v][0], classesToHide[v][1], hide);
        }
    }

    function hideClass(clsName, cnt, hide)
    {
        var cnter = -1;
        var isId = false;

        try
        {
            var sichtbarkeit = hide ? 'hidden' : 'visible';
            var ga = document.getElementsByClassName(clsName);
            


            if(ga === null || ga.length === 0)
            {
                var e = d.getElementById(clsName);
                ga = new Array();
                ga[0] = e;
                isId = true;
            }
            else
            {
                isId = false;
            }



            if(ga !== null)
            {
                for(var v in ga)
                {
                    if(ga[v] !== null)
                    {
                        cnter++;
                        if(cnter < cnt || ga[v].localName === "form")
                        {
                            continue;
                        }

                        if((!isId && ga[v].className === clsName) || (isId && ga[v].id !== undefined && ga[v].id === clsName))
                        {
                            /*
                            cnter++;
                            if(cnter < cnt)
                            {
                                continue;
                            }
                            */

                            ga[v].style.visibility = sichtbarkeit;
                            if(hide === true)
                            {
                                if (hBckup[ga[v].id] === undefined) { hBckup[ga[v].id] = ga[v].style.height;}
                                ga[v].style.height = '0px';
                            }
                            else
                            {
                                if (hBckup[ga[v].id] !== undefined) { ga[v].style.height = hBckup[ga[v].id]}
                            }

                            log(">>> hideClass: " + clsName + "[idx " + cnter + "] versteckt: " + hide);
                            console.log(ga);
                        }

                    }
                }
            }
            else
            {
                log(">>> hideClass: " + clsName + "[idx " + cnter + "]  ist NULL");
            }
        }
        catch(e)
        {
            window.alert("DiBa-Script-Hide-Class-Fehler: " + clsName + ": " + e.message);
            window.console.log("Fehler: " + e.message + " !!!");
            console.log(e);
        }
    }

    function editStyle(clsName, clsWidth)
    {
        try
        {
            var c;
            c = d.getElementsByClassName(clsName);
            if(c === null || c.length == 0)
            {
                c = d.getElementById(clsName);
            }

            if(c !== null && c.length > 0)
            {
                for(var v in c)
                {
                    try
                    {
                        c[v].style["max-width"] = clsWidth;
                        c[v].children[1].style.maxWidth = clsWidth;
                        log("editStyle(): " + clsName + " auf " + clsWidth + " gesetzt");
                    }
                    catch(ex)
                    {
                    }
                }
            }
        }
        catch(e)
        {
            window.alert("DiBa-Script-editStyle-Fehler: " + clsName + ": " + e.message);
            window.console.log("Fehler: " + e.message + " !!!");
            console.log(e);
        }
    }

    var f;
    function createFrame(url, id)
    {
        try
        {
            f = document.createElement('iframe');
            f.src = url;
            document.body.appendChild(f)
            f.setAttribute("id",id);


            return document.getElementById(id).contentDocument.getElementsByClassName("headline instrument-name")[0].innerHTML;
        }
        catch(e)
        {
            return id;
        }
    }

    function watchListFullNames()
    {
        var t = d.getElementById("ctl00_WebPartManager_wp1597137417_wp45466993_PortfolioItems_Control_Grid").childNodes[2].rows;
        for(var r in t)
        {
            console.log(t[r]);
            if(t[r].className === "first")
            {
                try
                {
                    var id = t[r].cells[0].textContent;
                    var url = t[r].cells[0].childNodes[0].getAttribute("href");

                    t[r].cells[0].textContent = createFrame(url, id);
                }
                catch(e)
                {
                    console.log(e);
                }
            }
        }
    }


    function restoreConsole()
    {
        var i = document.createElement('iframe');
        i.style.display = 'none';
        document.body.appendChild(i);
        window.console = i.contentWindow.console;
        i.parentNode.removeChild(i);
    }
})();