Startseite bisherige Projekte Tools/Snippets Bücherempfehlungen Publikationen Impressum Datenschutzerklärung

JavaScript für BookmarkletsDezember 2020

Hat der alte Hexenmeister 
Sich doch einmal wegbegeben! 
Und nun sollen seine Geister 
Auch nach meinem Willen leben. 
Seine Wort und Werke 
Merkt ich und den Brauch,
Und mit Geistesstärke 
Tu ich Wunder auch.
Bisweilen möchte man etwas mit einem Boorkmarklet im Browser fernsteuern.
Hier hilft das folgende grundlegende Framework um Dinge zu finden und zur Interaktion.

hxEnter(text, value): Fügt value im nächsten Textfeld hinter dem Text text ein.

hxClickEvent(text) oder hxClick(text): Klickt das Element mit dem Text text an.

hxClickClass(text, classpart): Klickt das Element mit dem Text text an, dessen Klasse classpart enthält.

hxClickButtonValue(text): Klickt das Element mit dem value text an. Ist schon sehr speziell.

formatDate(): Erzeugt einen String mit dem Datum bis zur Sekunde, von groß nach klein.

Einfach die Befehle unten an das Framework dranhängen, und ab damit ins Bookmarklet. Klappt mit den Ende 2020er Versionen von Firefox und Chrome.

javascript:
    function hxEnter(text, value){
        var n= document.evaluate('//*[contains(text(),"'+text+'")]/following::input', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
        if (n){
            hxEnterText(n, value);
        } else {console.log('nicht gefunden: '+text)}
    };
    function hxEnterText(n, text){
        n.value="";
        text.split('').forEach(function(c){
            hxEnterValue(n, c);
        });
    }
    function hxEnterValue(n, key){
        var event = null;
        n.focus();
        n.value= n.value + key;
    
        document.dispatchEvent(new KeyboardEvent('keydown',{'key':key,'bubbles':true}));
        n.dispatchEvent(new KeyboardEvent('keydown',{'key':key,'bubbles':true}));
        event = new Event('beforeinput', { 'bubbles': true });
        n.dispatchEvent(event);
        document.dispatchEvent(new KeyboardEvent('keypress',{'key':key,'bubbles':true}));
        n.dispatchEvent(new KeyboardEvent('keypress',{'key':key,'bubbles':true}));
        event = new Event('input', { 'bubbles': true });
        n.dispatchEvent(event);
        event = new Event('change', { 'bubbles': true });
        n.dispatchEvent(event);
        document.dispatchEvent(new KeyboardEvent('keyup',{'key':key,'bubbles':true}));
        n.dispatchEvent(new KeyboardEvent('keyup',{'key':key, 'bubbles':true}));
        event = new Event('beforeinput', { 'bubbles': true });
        n.dispatchEvent(event);
        n.blur();
    }
    function hxFireEvent(n) {
      var evt = new MouseEvent("mousedown", {
              view: window,
              bubbles: true,
              cancelable: true,
              clientX: 20
          });
          n.dispatchEvent(evt);
          evt = new MouseEvent("mouseup", {
              view: window,
              bubbles: true,
              cancelable: true,
              clientX: 20
          });
          n.dispatchEvent(evt);
    };
    function hxClickEvent(text) {
        var n = document.evaluate('//*[contains(text(), "' + text + '")]',document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
        if (n){
            hxFireEvent(n);
        } else {console.log('nicht gefunden: '+text)}
    };
    function hxClick(text) {
        var n = document.evaluate('//*[contains(text(), "' + text + '")]',document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
        if (n){
            n.click();
        } else {console.log('nicht gefunden: '+text)}
    };
    function hxClickClass(text, classpart) {
        var n = document.evaluate('//*[contains(text(), "' + text + '") and contains(@class, "'+classpart+'")]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
        if (n){
            n.click();
        } else {console.log('nicht gefunden: '+text)}
    };
    function hxClickButtonValue(text) {
        var n = document.evaluate('//*[contains(@value, "' + text + '")]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
        if (n){
            n.click();
        } else {console.log('nicht gefunden: '+text)}
    };
    function hxFindByPlaceHolder(text){
        var inputs = document.getElementsByTagName('input');
        if (inputs && inputs.length > 0){
            /** inputs is HTMLCollection, convert to array */
            var inputA = Array.prototype.slice.call(inputs);
            var n = inputA.find(function(val){
                return text === val.placeholder;
            });
            return n;
        }
    }
    function zweistellig(x){
        if (x < 10){
            return "0"+x;
        }
        return ""+x;
    }
    function formatDate(){
        var d = new Date();
        return (""+d.getFullYear())+zweistellig(1+d.getMonth())+zweistellig(d.getDate())+zweistellig(d.getHours())+zweistellig(d.getMinutes())+zweistellig(d.getSeconds());
    }
    void(0);
    
Impressum - Datenschutzerklärung