Button-Funktion von Addons über Firegestures aktivieren

  • Hallo,

    ich würde gerne bestimmte Button Funktionen/Aktionen von Addons die per Mausklick ausgeführt werden über ein Firegesture ausführen/starten.

    Mit Hilfe von DomInspector kann ich bei einigen Addons den Befehl hinter dem Button-Mausklick finden und wenn diese ein oncommand befehl ist, brauche ich es nur in Firegesture einzutragen und es funktioniert dann per Gestensteuerung.

    Bei noscript z.b. kann ich die "seite temporär erlauben" Funktion/Aktion einfach mit folgendem Befehl in Firegesture umsetzen:
    noscriptOverlay.allowPage();

    Jedoch sind viele der Addon-Befehle keine oncommand Befehle bzw. ich finde diese über DomInspector nicht und ich würde gerne wissen ob es eine Möglichkeit gibt über Firegesture Mausklicks auf die gewünschten Button zu simulieren, damit diese ihre hinterlegten Befehle ausführen.
    Oder wie ich z.b. das Script hinter dem Button-Mausklick herausfinde und diese einfach nur in Firegestures eintragen muss, wie bei einem oncommand befehl.

    Es wäre schön wenn es eine Lösung gibt, bei der ich dann alle gewünschten Button-Mausklicks selber erstellen kann, damit ich nicht bei jedem Addon extra hier im Forum nachfragen muss.

    Bei meinem aktuellen Fall mit dem Addon uMatrix geht es um den Befehl für "Mache alle temporären Änderungen rückgängig".
    Dafür muss ich zuerst mal auf den uMatrix Button klicken und dann im erscheinenden Popupfenster nochmal auf den eigentlichen Button klicken.
    Dies würde ich aber lieber über eine Firegesture Geste bewerkstelligen, da ich dies bevorzuge.

    Vielen Dank

  • das hatte ich vorher auch schon mal probiert, da es bei einem anderen addon-button funktioniert hatte.

    jedoch kriege ich bei fast allen anderen die ich versucht habe immer einen fehler.

    im fall vom uMatrix-button den fehler:
    Mausgeste fehlgeschlagen: (ReferenceError: buttonRevertAll is not defined)

  • es kommt die gleiche fehlermeldung wie im vorherigen lösungsvorschlag.

    EDIT:

    was mir gerade aufgefallen ist, vielleicht ist das ein sehr wichtiger hinweis:

    ich inspiziere die betreffenden addon-button mit Hilfe der Addon-Erweiterung Element Inspector für das Addon DOM Inspector und dann führt der mich direkt zum eintrag vom element.

    ich habe gerade direkt über den DOM Inspector versucht das betreffende element zu inspizieren, aber das betreffende element und viele andere meiner Addons sind in der Inspectionsvorschau garnicht sichtbar.

    das scheint wohl der grund zu sein, wieso er die fehlermeldung ausgibt, dass das element nicht definiert ist.

  • Für den uMatrix-Button zum Rückgängigmachen versuche mal:

    Code
    document.getElementById('umatrix-button').click();
    setTimeout(function() {
    	var umPopupDoc = document.getElementById('umatrix-panel').firstChild.contentDocument;
    	umPopupDoc.getElementById('buttonRevertAll').click();
    }, 1000);
  • dies funktioniert soweit, aber das popup bleib danach noch offen, kann man das dann auch automatisch wieder schließen?

    die id umatrix-panel ist wohl höchstwahrscheinlich die kopfzeile vom popup das sich öffnet, nehm ich mal an.
    wie oder womit bist du denn auf die id umatrix-panel gekommen? auf die schnelle konnte ich das mit dem PopupInspector nicht finden.

    außerdem denke ich mal, dass dieses script nur für diesen fall mit umatrix funktioniert und nicht allgemeingültig ist oder?
    (mit geänderter id natürlich)


    EDIT:

    habe mich wohl zu früh gefreut:
    nach etwas surfen habe ich gemerkt, dass ich bei schnellerem hintereinander aktivieren deines Scripts über die geste, den fehler "too much recursion" erhalte und das script nicht mehr funktioniert. außerdem hängt sich der umatrix icon button auch auf und ich kann nicht einmal mehr mit der maus selber draufklicken. d.h. das popup öffnet sich garnicht mehr und ich muss firefox neustarten.

  • der befehl document.getElementById(id).click() verursacht anscheinend nicht nur mit umatrix probleme.
    auch andere getestete addonfunktionen funktionieren nur ein paar mal und dann nicht mehr und in der browser-konsole erhalte ich ständig den fehler "too much recursion".

    und bei einigen stürzt mein firefox "irgendwie" ab, also das fenster verschwindet komplett (auch von der taskleiste), aber im taskmanager läuft es angeblich.
    z.b. wenn ich mit dem befehl die filtereinstellungen von Adblock Plus starten/öffnen will.

  • Der simulierte Klick auf den Button von Adblock Plus funktioniert bei mir mit FireGestures gar nicht.
    Die Filtereinstellungen kann man auch mit Strg+Umschalt+F öffnen und das Simulieren dieser Tastenkombination funktioniert.

    Der Code dafür:

    Code
    var evt = document.createEvent('KeyboardEvent');
    evt.initKeyEvent('keypress', true, true, window, true, false, true, false, 0, 70);
    document.dispatchEvent(evt);


    Mit einer direkten Anweisung geht es hier auch:

    Code
    openDialog('chrome://adblockplus/content/ui/filters.xul');
  • der simulierte klick direkt auf das Adblock Plus Icon funktioniert bei mir auch nicht, aber der klick auf die Filtereinstellungen verursacht den komischen absturz.

    ich hatte es aber auch nur zum testen versucht, da ich schon ein script für tastenkombinationen hatte (von der firegesture webseite)

    danke trotzdem für die zwei neuen codes.

    wäre schön, wenn du noch meine frage bezüglich umatrix beantworten könntest, also wie oder womit du auf die id umatrix-panel gekommen bist.

  • Um Veränderungen im DOM zu sehen, habe ich in der Browserkonsole dieses Skript laufen lassen:


    So bin ich nach Klick auf den uMatrix-Button auf das Element mit der id "umatrix-panel" gekommen und habe mir es dann im DOM Inspector genauer angesehen.

  • danke für das script, vielleicht kann es mir ja auch mal nutzen.

    der thread kann als gelöst betrachtet werden, da anscheinend keine allgemeingültige möglichkeit für mein vorhaben gibt.

    danke nochmals für deine hilfe aborix

    EDIT:
    tut mir leid, dass ich das jetzt noch frage, aber was muss ich denn in diesen code von dir einfügen, damit sich das popup wieder automatisch schließt nachdem auf den 'buttonRevertAll' geklickt wurde?

    Code
    document.getElementById('umatrix-button').click();
    setTimeout(function() {
       var umPopupDoc = document.getElementById('umatrix-panel').firstChild.contentDocument;
       umPopupDoc.getElementById('buttonRevertAll').click();
    }, 1000);
  • Ich weiß es leider nicht. Ich habe verschiedenes versucht, nichts davon funktioniert.

    Code
    document.getElementById('PanelUI-popup').hidePopup();

    müsste normalerweise das Popup schließen. Ein simulierter Klick irgendwohin außerhalb des Popups ebenso.

  • Ich habe das falsche Panel genommen.

    So geht's, alles zusammen jetzt:

    Code
    document.getElementById('umatrix-button').click();
    setTimeout(function() {
       var umPopupDoc = document.getElementById('umatrix-panel').firstChild.contentDocument;
       umPopupDoc.getElementById('buttonRevertAll').click();
    	setTimeout(function() {
    		document.getElementById('customizationui-widget-panel').hidePopup();
    	}, 1000);
    }, 1000);


    Bei den Timeouts kann man mit den Zeiten wahrscheinlich noch heruntergehen, ganz ohne klappt es bei mir nicht.