2017-06-19 3 views
0

Dies ist für ein Benutzerkonto in Firefox (Waterfox).Wie wird eine dauerhafte Symbolleiste erstellt?

Wir haben eine Cloud-Datenbank (CRM Dynamics), die, um einen bestimmten Datensatz zu laden, führt der Browser drei Seiten lädt mit verschiedenen URLs und Parameter.

Ich möchte Parameter von einer dieser Seitenladungen (die in der Mitte lädt) abrufen und auf der Seite irgendwo als Referenz anzeigen. Also habe ich ein Div erstellt, das genau unter das Hauptband passt.

Das Problem ist, dass, da die Seite drei Mal geladen wird, das Skript lädt drei Mal, so dass ich GM_getValue und GM_setValue zum Speichern und Abrufen von Daten auf die nachfolgenden Seitenladevorgänge verwenden.

Allerdings ist es schlimmer als das.

  • DOM Elemente auf der Seite können nur beim ersten Laden hinzugefügt/geändert werden - diese lädt alle HTML.
  • Der Wert, den ich brauche, ist in den Abfrageparams auf der zweiten Ladung - die nur Daten auf der ersten Seite füllt.
  • Es gibt keine Möglichkeit, den query param -Wert auf der Symbolleiste-div auf der zweiten oder dritten Seite lädt zu erhalten; und ich habe den Wert erst bei der zweiten Ladung. Ich denke, dass die beiden letztgenannten Seitenladungen nur zum Übergeben von Parametern zwischen den Seitenladungen dienen - es gibt kein Seiten-DOM in diesen Ladungen.
  • Das Userscript wird bei jedem Seitenaufruf ausgelöst.
  • Auf dem dritten Pagenload kann ich Aktionen ausführen, kann aber nicht mit dem HTML interagieren (es gibt keine in diesem Pageload), obwohl das HTML im Fenster ist.
  • Gibt es eine Möglichkeit, meine Toolbar-Div in das DOM des Browsers anstelle des DOM der Seite zu setzen? Auf diese Weise könnte es einen Ort geben, auf den jede Seitenladung zugreifen kann.

    Was ich tun möchte, ist irgendwie die erste Seite laden, um etwas zu tun nach die dritte Seite geladen wurde beendet.

    +0

    Ich kann jquery in das Userscript laden, kein Problem. Ich würde ein Beispiel schreiben, aber ich kann mir keinen Weg vorstellen, es ohne Zugang zu unserer Crm verständlich zu machen. – bgmCoder

    +0

    Die Parodie scheint interessant, aber es gibt keine Möglichkeit für mich, die URL + die Parameter zu kennen, die notwendig sind, um zu spoofen; Wenn ich die auf der ersten Seite lerne, müsste ich überhaupt nicht spoofen. – bgmCoder

    +1

    Die Frage ist zu breit, Sie müssen es auf einen MCVE herunterkochen. Im Allgemeinen können Sie mit 'postMessage' oder' localStorage' (nur gleiche Domäne) oder mit 'GM_setValue' tun, was Sie wollen, um zwischen den Skript-Instanzen zu kommunizieren. Wenn es sich um Rahmen mit derselben Domäne (i) handelt, haben Sie zusätzliche Optionen. –

    Antwort

    0

    Ich habe es herausgefunden! Brock Adams Kommentar ließ mich zu einer Lösung kommen. Danke, Brock.

    So Figur, die ich den Code auf der ersten Seite zu laden, ausführen und sicherstellen, dass es dies tut:

    $(window).on('load', function() { 
        console.log('updating itemid'); 
        $('#myd').text(GM_getValue("itemid")); 
    }); 
    

    Das window.load Ereignis ausgelöst wird auf jeder Seite zu laden, so dass, wenn die letzte Pageload läuft, löst es das loading Ereignis und aktualisiert den Div-Text. Anscheinend wird dieses Ereignis nicht ausgelöst, bis das dritte Pagenoad abgeschlossen ist.

    Verwandte Themen