apsel: link soll javascript auslösen

Hallo,

ich bin einer derjenigen, der bei der Erstellung seiner Seite auf Frames gesetzt hat und dann irgendwann auch über die Nachteile der Verwendung von Frames gestolpert ist.

Langer Rede kurzer Sinn: Ich möchte, dass immer das komplette Frameset angezeigt wird. Das habe ich auch super hinbekommen (Bei mir hat die Funktion den Namen CheckFrameset). Nun gibt es aber auch Seiten, bei denen es garnicht schlimm ist, wenn sie allein angezeigt werden. Allerdings soll das Frameset nachgeladen werden, sobald der Nutzer auf einen Link klickt.

Naive Vorstellung von mir:

<a onclick: CheckframeSet() href=" ...> ...

Das klappt aber so nicht.

Vielen Dank für eure Hilfe.

Matthias

PS:  Ich habe die Suche bemüht, konnte aber nichts finden.
PSS: Ohne Frames mach ichs beim nächsten Mal.

  1. Liebe(r) apsel,

    <a onclick: CheckframeSet() href=" ...> ...

    <a onclick="CheckframeSet()" href="..."> ...

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Hallo Felix,

      vielen Dank für deine Antwort.

      Ne die Syntax war es nicht, ich hatte die Anführungsstriche nur vergessen hinzuschreiben. Wenn du magst, schau mal unter www.billiger-im-urlaub.de/germany/mv/mv.html in den Quelltext.

      Matthias

      1. Hallo apsel,

        »»... www.billiger-im-urlaub.de/germany/mv/mv.html ...

        du solltest mal die Fehlerkonsole bemühen:

        <body onLoad="check Frameset()" text="#000000" bgcolor="#FDCC8D" link="#0000FF" alink="#8080FF" vlink="#8080FF">  
        
        

        checkFrameset und nicht check Frameset

        <a onclick="checkFrameset()" href="http://58823.dynamicboard.de/f22-Seencard.html">Forum<br>1000Seencard</a>

        hier fehlt ein return false, sonst wird der Link ausgeführt:

        <a onclick="checkFrameset();return false" href="http://58823.dynamicboard.de/f22-Seencard.html">Forum<br>1000Seencard</a>

        Gruß, Jürgen

        1. Hallo Jürgen,

          vielen Dank für deine Mühe.

          <body onLoad="check Frameset()" text="#000000" bgcolor="#FDCC8D" link="#0000FF" alink="#8080FF" vlink="#8080FF">

          
          > checkFrameset und nicht check Frameset  
            
          Hier ist das Leerzeichen zu Testzwecken absichtlich drin, denn das komplette Frameset soll nicht gleich sofort angezeigt werden, sondern erst wenn ein Link benutzt wird.  
            
          
          > (Nun gibt es aber auch Seiten, bei denen es garnicht schlimm ist, wenn sie allein angezeigt werden. Allerdings soll das Frameset nachgeladen werden, sobald der Nutzer auf einen Link klickt. [ siehe mein 1. Beitrag](https://forum.selfhtml.org/?t=193207&m=1289790))  
            
            
          
          > `<a onclick="checkFrameset()" href="http://58823.dynamicboard.de/f22-Seencard.html">Forum<br>1000Seencard</a>`{:.language-html}  
          >   
          > hier fehlt ein return false, sonst wird der Link ausgeführt:  
          >   
          > `<a onclick="checkFrameset();return false" href="http://58823.dynamicboard.de/f22-Seencard.html">Forum<br>1000Seencard</a>`{:.language-html}  
            
          Guter Hinweis, aber es sollen ja (mit einem Klick) zwei Sachen gemacht werden 1. Prüfen ob das Frameset da ist und ggf. nachladen und 2. dem Link folgen.  
            
          Vielleicht kann man ja die Linkadresse der Funktion checkFrameset() übergeben?  
            
          Matthias
          
          1. Lieber Matthias,

            checkFrameset und nicht check Frameset

            Hier ist das Leerzeichen zu Testzwecken absichtlich drin, denn das komplette Frameset soll nicht gleich sofort angezeigt werden, sondern erst wenn ein Link benutzt wird.

            das mit dem Leerzeichen ist grober Unfug! Du brauchst zwei Funktionen. Eine führst Du onload aus, eine andere onclick. Man kann in der über onclick gestarteten Funktion über this.href das Linkziel des eben angeklickten Links ermitteln.

            Und warum hast Du die Dir gegebenen Ratschläge noch nicht umgesetzt?

            Liebe Grüße,

            Felix Riesterer.

            --
            ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
            1. Lieber Matthias,

              das mit dem Leerzeichen ist grober Unfug! Du brauchst zwei Funktionen. Eine führst Du onload aus, eine andere onclick. Man kann in der über onclick gestarteten Funktion über this.href das Linkziel des eben angeklickten Links ermitteln.

              Stimmt.

              aber wenn das so klappt, wie ich mir das vorstelle, dann brauch ich für diese Seite keine onload-Funktion.

              Und warum hast Du die Dir gegebenen Ratschläge noch nicht umgesetzt?

              weil ich von diesem Rechner keinen Zugriff auf meine Seite habe.

              Wie muss dann die Funktion aussehen, damit sie nach der Prüfung den Link ausführt?

                
              <SCRIPT language="JavaScript">  
              <!--  
               function checkFrameset() {  
                if(!parent.leer)  
                 location.href="http://www.billiger-im-urlaub.de/?" + location.pathname;  
               }  
              //-->  
              </SCRIPT>  
                
              
              
          2. Hallo apsel,

            Hier ist das Leerzeichen zu Testzwecken absichtlich drin, denn das komplette Frameset soll nicht gleich sofort angezeigt werden, sondern erst wenn ein Link benutzt wird.

            das ist schon starker Tobak, zu Testzwecken einen Fehler einbauen. Wolltest du die Fehlerkonsole testen?

            Zur Geschichte mit dem nachträglichen Einframen gibt es einen Artikel:

            Datei dynamisch in Frameset laden

            Gruß, Jürgen

            1. Hallo Jürgen,

              nein ich wollte nur nicht, dass bei onload die Funktion checkframeset ausgeführt wird.

              Im Quelltext ist es deshalb drin, weil es in den anderen Seiten meines Projektes so verwendet wird.

              Matthias

            2. Hallo Jürgen,

              das nachträgliche Einframen funktioniert super auch dank des Artikels, ist aber hier nicht das Problem.

              Matthias

              1. Hallo apsel,

                das nachträgliche Einframen funktioniert super auch dank des Artikels, ist aber hier nicht das Problem.

                du musst das, was im Artikel per onload passiert, doch nur per onclick auslösen. Im Link aber das return false nicht vergessen.

                <a href="inhalt.html" onclick="return toFrame(this.href)" ...

                function toFrame(Inhalt) {  
                  if(nicht_im_Frame) {                            // Prüfen, ob Seite nicht im Frame  
                    location.href = "Frameseite.html?"+Inhalt" ;  // Seite einframen  
                    return false;                                 // Link nicht verfolgen  
                  else  
                    return true;                                  // Link verfolgen  
                }
                

                (ungetestet)

                Gruß, Jürgen

                1. Hallo Jürgen,

                  vielen Dank.

                  Der Link soll jedoch in jedem Fall verfolgt werden.

                  Matthias

                  1. Hallo apsel,

                    Der Link soll jedoch in jedem Fall verfolgt werden.

                    ich glaube, du hast den Artikel und/oder meinen Beispielcode nicht verstanden. In meinem Beispiel wird per onklick im Link eine Funktion aufgerufen, die prüft, ob die Seite nicht im Frame ist und sie bei Bedarf im Frame neu lädt. Wenn die Seite schon im Frame ist, wird der Link einfach ausgeführt.

                    Gruß, Jürgen

                    1. Hallo Jürgen,

                      ich glaube, du hast den Artikel und/oder meinen Beispielcode nicht verstanden.

                      Dies ist dein Beispielcode:

                      1  function toFrame(Inhalt) {
                      2  if(nicht_im_Frame) {                            // Prüfen, ob Seite nicht im Frame
                      3      location.href = "Frameseite.html?"+Inhalt" ;  // Seite einframen
                      4      return false;                                 // Link nicht verfolgen
                      5    else
                      6      return true;                                  // Link verfolgen
                      7  }

                      Wenn ich nun meine Pascal-programmierkenntnisse einsetze:

                      Für den Fall dass, die Seite nicht im Frame ist, wird sie eingeframt und der Link wird nicht verfolgt

                      anderenfalls (else) wird der Link verfolgt.

                      Im if-zweig steht doch auch eindeutig als Kommentar // Link nicht verfolgen

                      Wenn man es so ändert:

                      1  function toFrame(Inhalt) {
                      2  if(nicht_im_Frame) {                            // Prüfen, ob Seite nicht im Frame
                      3      location.href = "Frameseite.html?"+Inhalt" ;  // Seite einframen
                      4      }
                      6      return true;                                  // Link verfolgen
                      7  }

                      könnte es dann so richtig sein?

                      Matthias

                2. Hallo Jürgen,

                  <a href="inhalt.html" onclick="return toFrame(this.href)" ...

                  sorgt dafür, dass das Linkziel gleich im Frame dargestellt wird?

                  Wenn das so ist, habe ich den Code verstanden sonst diesem Link folgen.

                  In jedem Fall Danke für deine Mühe

                  Matthias

      2. Mahlzeit apsel,

        Ne die Syntax war es nicht, ich hatte die Anführungsstriche nur vergessen hinzuschreiben.

        Du scheinst echt ein Komiker zu sein ... was genau soll das denn sonst sein, wenn kein Syntaxfehler (vergessene Anführungszeichen)?

        Außerdem war da noch erheblich mehr falsch als nur vergessene Anführungszeichen:

        <a onclick: CheckframeSet() href=" ...>

        1: Du hast statt eines Gleichheitszeichens einen Doppelpunkt benutzt.

        2: Du hast ein problemträchtiges Leerzeichen zwischen Attributnamen und Attributwert ... das ist kein großes Problem, wenn Du (wie empfohlen) den Attributwert in Anführungszeichen einschließt - wenn diese jedoch fehlen, kann das zu unerwarteten Fehlern führen.

        3: Javascript ist case-sensitiv, d.h. es ist ein Unterschied, ob die Funktion nun "CheckframeSet", "CheckFrameset" oder "checkFrameset" heißt.

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. Mahlzeit apsel,

          Ne die Syntax war es nicht, ich hatte die Anführungsstriche nur vergessen hinzuschreiben.

          Du scheinst echt ein Komiker zu sein ...

          nehm ich jetzt mal als Kompliment.

          was genau soll das denn sonst sein, wenn kein Syntaxfehler (vergessene Anführungszeichen)?

          Außerdem war da noch erheblich mehr falsch als nur vergessene Anführungszeichen:

          <a onclick: CheckframeSet() href=" ...>

          1: Du hast statt eines Gleichheitszeichens einen Doppelpunkt benutzt.

          2: Du hast ein problemträchtiges Leerzeichen zwischen Attributnamen und Attributwert ... das ist kein großes Problem, wenn Du (wie empfohlen) den Attributwert in Anführungszeichen einschließt - wenn diese jedoch fehlen, kann das zu unerwarteten Fehlern führen.

          Das ist natürlich meine Schuld, weil ich den Quelltext nicht vom Original kopiert habe, sondern nur abgeschrieben habe. Das Original sieht so aus:

          <a onclick="checkFrameset()" href="http://58823.dynamicboard.de/f22-Seencard.html">Forum<br>1000Seencard</a>  
          
          

          3: Javascript ist case-sensitiv, d.h. es ist ein Unterschied, ob die Funktion nun "CheckframeSet", "CheckFrameset" oder "checkFrameset" heißt.

          Das ist ein guter Hinweis, habe ich nicht dran gedacht, hier ist aber die Groß- und Kleinschreibung beachtet.

          MfG,
          EKKi

          1. Mahlzeit apsel,

            Das ist natürlich meine Schuld, weil ich den Quelltext nicht vom Original kopiert habe, sondern nur abgeschrieben habe.

            Und so etwas müssen Deine Leser natürlich erraten und bei ihren Überlegungen und Antworten gleich mit berücksichtigen?!?

            Das Original sieht so aus:

            <a onclick="checkFrameset()" href="http://58823.dynamicboard.de/f22-Seencard.html">Forum<br>1000Seencard</a>

              
            Aha (Und warum nicht gleich so? Merke: es ist immer besser - weil weniger problemanfällig - \*genau den Code\*, der Fehler verursacht, per Copy'n'Paste hier einzufügen, als zu versuchen "den irgendwie nachzubasteln" ... in jedem zweiten Thread passiert so etwas - und ist extrem nervig, für alle Beteiligten!).  
              
            Und [was genau](http://forum.de.selfhtml.org/hilfe/charta.htm#tipps-fuer-fragende) funktioniert daran jetzt nicht? Bzw. nicht so, wie Du es erwartest? Der Code selbst sieht nämlich ziemlich richtig aus.  
              
              
            MfG,  
            EKKi  
            
            -- 
            sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
            
            1. es sollen (mit einem Klick) zwei Sachen gemacht werden 1. Prüfen ob das Frameset da ist und ggf. nachladen und 2. dem Link folgen.

              Vielleicht kann man ja die Linkadresse der Funktion checkFrameset() übergeben?

              Matthias

              1. Mahlzeit apsel,

                es sollen (mit einem Klick) zwei Sachen gemacht werden 1. Prüfen ob das Frameset da ist

                Und das macht die Funktion "checkFrameset()"?

                und ggf. nachladen

                Das könnte sie dann gleich mit erledigen - informiere Dich dazu einfach zum Thema "Frameset nachladen".

                und 2. dem Link folgen.

                Das tut ein Link automatisch - außer, Du sorgst dafür, dass er das nicht tun soll ... z.B. innerhalb des "onclick"-Eventhandlers mit einem "return false;". Solange Du das *nicht* machst, feuert beim Anklicken eines Links erst der "onclick"-Handler, es wird ausgeführt, was dort drinsteht und anschließend wird dem Link gefolgt.

                Vielleicht kann man ja die Linkadresse der Funktion checkFrameset() übergeben?

                Warum sollte man das tun (s.o.)? Aber *falls* man das will, dann könnte man z.B. im Eventhandler dem Funktionsaufruf "checkFrameset()" einfach http://de.selfhtml.org/javascript/sprache/objekte.htm#this@title=this als Parameter mitgeben - das entspricht dann in dem Moment dem aktuellen Element, d.h. also dem Link. Dieser wiederum hat eine Eigenschaft namens "http://de.selfhtml.org/html/verweise/definieren.htm#beispiele@title=href".

                MfG,
                EKKi

                --
                sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                1. Hallo,

                  und 2. dem Link folgen.
                  Das tut ein Link automatisch - außer, Du sorgst dafür, dass er das nicht tun soll ... z.B. innerhalb des "onclick"-Eventhandlers mit einem "return false;". Solange Du das *nicht* machst, feuert beim Anklicken eines Links erst der "onclick"-Handler, es wird ausgeführt, was dort drinsteht und anschließend wird dem Link gefolgt.

                  und genau das führt hier zum Problem, wenn man sich über die zeitliche Abfolge nicht im Klaren ist:

                  1 Erst wird der onclick-Handler ausgeführt.
                     Der sorgt dafür, dass das Frameset nachgeladen wird.
                     Allerdings gibt er noch das gegenwärtig "aktuelle" Dokument zum Laden in
                     das Frame-Fenster in Auftrag (URL-Parameter).
                   2 Während der Browser noch auf das Eintreffen der Frameset-Ressource
                     wartet, folgt er *vielleicht* noch dem Link im sterbenden Dokument und
                     lädt ein einzelnes Dokument in das Frame, das den Link enthält.
                   3 Wenn das Frameset geladen und ausgewertet ist, lädt es die darin ent-
                     haltenen Frames (Grundstellung) nach.
                   4 Wenn das alles erledigt ist, wertet das Javascript im Frameset den URL-
                     Parameter aus und lädt abermals (jetzt zum dritten Mal) ein neues
                     Dokument in das Frame-Fenster. Jetzt haben wir wieder den Urzustand. ;-)

                  Vielleicht kann man ja die Linkadresse der Funktion checkFrameset() übergeben?
                  Warum sollte man das tun (s.o.)?

                  Weil man andernfalls immer konkurrierende Vorgänge anstößt und am Schluss an einem Punkt landet, wo man nicht hin will.

                  Aber *falls* man das will, dann könnte man z.B. im Eventhandler dem Funktionsaufruf "checkFrameset()" einfach http://de.selfhtml.org/javascript/sprache/objekte.htm#this@title=this als Parameter mitgeben

                  Ich sehe darin die einzige erfolgversprechende Möglichkeit.

                  Ciao,
                   Martin

                  --
                  Man sollte keinen Senf von sich geben, wenn man nicht auch das Würstchen dazu liefern kann.
                2. Hallo EKKi,

                  Mahlzeit apsel,

                  es sollen (mit einem Klick) zwei Sachen gemacht werden 1. Prüfen ob das Frameset da ist

                  Und das macht die Funktion "checkFrameset()"?

                  und ggf. nachladen

                  Das könnte sie dann gleich mit erledigen - informiere Dich dazu einfach zum Thema "Frameset nachladen".

                  Das macht sie.

                  Ich hab jetzt erstmal ganz viel zum Nachdenken bekommen vor allem

                  dies hier, Dank an DenMartin und das hier Dank an Jürgen.

                  Ich werd mich damit beschäftigen und schauen was warum oder warum nicht passiert.

                  Falls es nicht so läuft, wie es soll, meld ich mich wieder.

                  Matthias

  2. Mahlzeit apsel,

    PS:  Ich habe die Suche bemüht, konnte aber nichts finden.

    Das glaube ich Dir nicht. Und zwar weil es glatt gelogen ist.

    Nach der Eingabe von "onclick" in die hiesige Suche findet sich sehr wohl etwas ... nämlich haufenweise zielführende Links.

    Ähnlich verhält es sich auch mit der Suche bei der allwissenden Müllhalde ... bei mir ist sogar gleich der erste Treffer der richtige Abschnitt in SELFHTML.

    Nur interessehalber: würdest Du mir verraten, wie und nach was Du gesucht hast?

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Selbstverständlich.

      Sucheingaben: javascript, link,
      link soll javascript auslösen ...

      natürlich habe ich auch etwas gefunden, allerdings nichts, was mir weiterzuhelfen verspricht. Ich habe sogar ganz alte Forumsbeiträge gelesen.

      Außerdem bitte ich darum, nicht der Lüge bezichtigt zu werden. Ich gehe nicht sorglos mit anderer Leute Zeit um.

      Ich werd jetzt mal die haufenweise zielführenden Links anschauen - Das könnte nämlich das Hilfreiche Deiner Antwort sein. Den ganzen Rest hättest du dir sparen können.

      Matthias

    2. Die für mich verlinkte Suche offenbarte Beiträge, die ich auch schon gelesen habe, unter anderem im Forumsarchiv 2009 Nr. 7, 8, 10 und 23.

      Der erste Google-Link führt zu onclick. Das ist insoweit richtig, als dass onclick bei Grafiken funktioniert und ich das auch schon verwendet habe, onclick innerhalb eines Verweises nicht erlaubt zu sein scheint.

      Matthias

      1. ... onclick innerhalb eines Verweises nicht erlaubt zu sein scheint.

        Das ist - einfach gesagt - http://de.selfhtml.org/javascript/sprache/eventhandler.htm#onclick@title=falsch!

      2. Mahlzeit apsel,

        Die für mich verlinkte Suche offenbarte Beiträge, die ich auch schon gelesen habe, unter anderem im Forumsarchiv 2009 Nr. 7, 8, 10 und 23.

        Aber offensichtlich hast Du sie nicht verstanden. Du hast Dir vermutlich auch nicht die Mühe gemacht, sie zu verstehen. Oder anhand der Beiträge weiter nachzuforschen. Oder alternativ konkrete Fragen zu stellen.

        Stattdessen behauptest Du, "nichts" gefunden zu haben. Und das war, ist und bleibt nachweislich falsch.

        Der erste Google-Link führt zu onclick. Das ist insoweit richtig, als dass onclick bei Grafiken funktioniert und ich das auch schon verwendet habe, onclick innerhalb eines Verweises nicht erlaubt zu sein scheint.

        Wie kommst Du zu dieser abstrusen (und falschen) Behauptung?

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. Hallo Ekki,

          Die für mich verlinkte Suche offenbarte Beiträge, die ich auch schon gelesen habe, unter anderem im Forumsarchiv 2009 Nr. 7, 8, 10 und 23.

          Aber offensichtlich hast Du sie nicht verstanden.

          Das mag sein.

          Du hast Dir vermutlich auch nicht die Mühe gemacht, sie zu verstehen.

          Das ist eine Unterstellung.

          Oder alternativ konkrete Fragen zu stellen.

          Genau das ist dabei das Problem: Wenn man nicht weiß, wie ein Wort geschrieben wird, kann man auch nicht nachschauen, wie es geschrieben wird.

          Stattdessen behauptest Du, "nichts" gefunden zu haben. Und das war, ist und bleibt nachweislich falsch.

          Stimmt.

          Der erste Google-Link führt zu onclick. Das ist insoweit richtig, als dass onclick bei Grafiken funktioniert und ich das auch schon verwendet habe, onclick innerhalb eines Verweises nicht erlaubt zu sein scheint.

          Wie kommst Du zu dieser abstrusen (und falschen) Behauptung?

          Da dort steht "zu sein scheint", ist es keine Behauptung sondern eine Vermutung / Frage.

          aber ich möchte mich eigentlich hier nicht über Dinge streiten, die ich letztlich nicht nachweisen kann/möchte. (z.B. Was ich getan und gelassen habe). Trotzdem bin ich dankbar, dass du dich dann doch noch näher damit auseinander gesetzt hast.

          Matthias