JavaScript über HTML-Link ausführen, auch wenn Link in neuem Fenster (oder Tab) geöffnet wird

  • JavaScript

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Marcus Gräfe.

    JavaScript über HTML-Link ausführen, auch wenn Link in neuem Fenster (oder Tab) geöffnet wird

    Ich habe folgende Situation:

    Auf einer Seite einer (Intranet-) Website sind diverse Links, die je ein JavaScript auf der selben Seite aufrufen.

    Beispiel:

    HTML-Quellcode

    1. <a href="javascript:doLogin('web');">Intranet</a>

    In diesem JavaScript wird am Ende folgendes gemacht:

    JavaScript-Quellcode

    1. document.location.href = ziel

    Es wird also eine neue Seite aufgerufen (Fremdwebsite).

    Das funktioniert wunderbar, wenn der User einen normalen Mausklick auf den Link macht und die Zielseite somit im selben Fenster (bzw. Tab) öffnet.

    Möchte der User die Seite aber in einem neuen Fenster öffnen (z. B. mittels Shift + Linksklick), so bekommt er eine weiße Seite, weil er das JavaScript im neuen Fenster aufruft (und das existiert auf einer leeren Seite natürlich nicht).

    Nun könnte ich zwar einfach im JavaScript direkt ein neues Fenster öffnen, aber der eine möchte die Seite im selben, der andere im neuen Fenster öffnen.

    Welche Lösungsmöglichkeiten gibt es? Ein href="#" und den JS-Aufruf bei "onclick" funktioniert nicht (hatte ich auch nicht wirklich erwartet). Dann wird nur die Link-Seite neu aufgerufen, nicht das JS.

    Schön wäre, wenn man z. B. im JS abfragen könnte, ob der User plant, ein neues Fenster zu öffnen. Oder wenn man im Link definiert, dass das JS im neuen Fenster aufgerufen wird, also im "target".

    Mir fällt nur die Idee einer Zwischenseite ein, d. h. man ruft eine andere HTML-Seite auf, die wiederrum das JS enthält. Das würde zwar auf jeden Fall gehen, aber so eine Zwischenseite sieht einfach blöd aus.

    Ich bin für jeden Lösungsansatz dankbar!
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Hi Marcus,

    du könntest in den JavaScript-Funktionen auf Events reagieren (Tastatur, Maus) und dementsprechend die Seite in einem neuen Tab / Fenster öffnen oder im eigenen.
    Ein möglicher Ansatz wäre also Benutzereingaben abfangen, auswerten und danach entscheiden welche Aktion getätigt wird.
    Der Benutzer muss natürlich wissen, welche Ereignisse auszulösen sind für die jeweilige Aktion. STRG+Klick macht Sinn, weiß aber ohne Testen grad auch nicht ob das ausgewerten kann bevor der Browser von sich aus darauf reagiert.


    Link :thumbup:
    Hello World
    Daran dachte ich auch, aber meiner Meinung nach gibt es zu viele Möglichkeiten, das Ziel im neuen Tab zu öffnen. Das alles abzufragen, wäre mühselig. Zudem gibt es sicher Arten, die man einfach nicht abfragen kann.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Der Zweck steht ja eigentlich im 1. Post — manche möchten den Link in einem neuen Fenster öffnen, andere aber nicht. Und es ist so oder so zwingend erforderlich, dass ein JS die neue Seite aufruft.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Das Problem an solchen Clientseitigen Operationen ist eben dass sie wie oben gesagt, nie wirklich funktionieren und es immer Browser gibt wo Spezialfälle auftreten. Du kannst das Problem wahrscheinlich leider nicht 100% mit Javascript lösen.
    Intranet

    Kann die Unterstützung damit auf einen einzigen Browser beschränkt werden? In diesem Falle könnte man gezielt eine Lösung suchen.
    SᴛᴀʀGᴀᴛᴇ01
    Danke. Das ist eine Möglichkeit, könnte die User aber nerven (das ständige Bestätigen der Meldung). Ich denke, unterm Strich ist das beste die Zwischenseite. Also der Link ruft eine HTML-Seite auf, die wiederrum das JS enthält.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Dann frag den User wenn er die Seite das erstemal aufruft und speichere das als Cookie oder im localstorage des Browsers.
    Ich habe es nun wie folgt gelöst:

    Die Links sind nun alle in folgendem Format:

    HTML-Quellcode

    1. <a href="index.html?login=intranet" onclick="doLogin('intranet'); event.preventDefault();">Intranet</a>

    Unten auf der Seite habe ich folgendes JavaScript:

    JavaScript-Quellcode

    1. param = '?login=';
    2. if (document.location.search.indexOf(param) >= 0) {
    3. doLogin(document.location.search.substr(document.location.search.indexOf(param)+param.length));
    4. }

    Diese beiden Dinge führen nun zu folgendem:
    Klickt der User normal auf den Link, wird das JavaScript für den Intranet-Login direkt aufgerufen (quasi wie vorher). Öffnet der User den Link aber in einem neuem Tab/Fenster, so wird das onclick-Ereignis nicht ausgeführt (warum auch immer, aber das ist hier gut so). Im neuen Fenster wird dann anhand des Aufrufparameters das JavaScript aufgerufen, welches sonst (im selben Fenster) direkt durch das onclick aufgerufen werden würde.

    So ist es nun für uns akzeptabel, auch wenn es noch zwei Unschönheiten gibt:
    1.) Das Klicken des Links bei gleichzeitigem Drücken der Shift-Taste öffnet kein neues Fenster. Shift wird vermutlich wegen des onclick nicht beachtet.
    2.) Der User erhält im neuen Fenster zunächst einmal wieder die Seite, auf welcher er den Link angeklickt hat. Erst kurze Zeit später (0,5-5 Sekunden) ist die Weiterleitung auf die Fremdseite erfolgt (durch das JS).
    Aber das ist hier im Intranet, wo man jeden User darüber informieren kann, nicht relevant.

    Danke an alle!
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum