Erkennen ob Seite bereits in einem Tab geöffnet ist

  • Ich kann mit einem Link

    Code
    1. href="anfrage.html" target="Anfrage"

    dafür sorgen dass bei mehrmaligem Klicken des Links der Tab "Anfrage" nicht mehrmals geöffnet wird, allerdings werden dabei bereits eingegebene Formulardaten wieder gelöscht. Gibt es eine Möglichkeit, dass eingegebene Formulardaten erhalten bleiben? Oder kann ich per JS abfragen ob der Tab "Anfrage" schon geöffnet ist und ihn in den Vordergrund holen anstatt ihn nochmals aufzurufen?

  • ????

    Bitte etwas genauer und ggf mit Code

    Ich verstehe das so, wenn man auf dein target Link klickt wird ein neuer Tab/Fenster geöffnet.

    Du möchtest das mit JS abfragen ob das schon auf ist , richtig ?

    Mit target geht das wahrscheinlich nicht.

    Wenn du aber mit window open ein Fenster öffnest hast du mehr möglichkeiten da was abzufragen( ob offen ist , usw...);

  • Hey lagraf,


    du kannst dafür den Session Storage des Browsers für die Seite nutzen. Darin speicherst du dann einen Wert ab, mit dem du prüfen kannst, ob der Tab bereits aufgerufen wurde.


    Den Wert kannst du dann mittels dem Click-Event setzen.


    Hilfreiche Links für dein Vorhaben können diese hier sein:


    Stef

  • Ich öffne einen neuen Tab und speichere seinen Handle in den Session Storage

    Code
    1. var myTab = window.open("anfrage.html", "basket");
    2. sessionStorage.setItem("basket", myTab);

    Später hole ich den Handle wieder heraus und möchte den Tab in den Vordergrund bringen

    Code
    1. var myTab = sessionStorage.getItem("basket");
    2. myTab.focus();

    Dabei bekomme ich die Fehlermeldung dass focus() keine Funktion ist!

    Sollte focus() in diesem Fall nicht eine Methode laut https://www.w3schools.com/jsref/met_win_focus.asp sein?

  • Im Sessionstorage kannst Du nur Strings speichern, keine Objekte etc. Wenn Du deine Variable myTab speicherst wird Javascript implizit eine Konvertierung in einen String vornehmen. Liest Du diesen dann wieder aus, bekommst Du nicht das ursprüngliche Objekt mit seinen Methoden etc., daher gibt es darin auch keine Methode focus().

  • Ich habe es jetzt so gelöst:

    • im Anfrageformular die Variablen wegsichern wenn es den Focus verliert
    • beim neuerlichen Aufruf mit dem gleichen Tabnamen werden die Variablen zwar gelöscht
    • aber ich stelle sie aus dem sessionStorage wieder her wenn das Anfrageformular den Focus bekommt
    • wird das Anfrageformular geschlossen, lösche ich den sessionStorage

    Damit scheint es zu funktionieren!