Bastian: Javascript bereitet mit Firefox Probleme

Hallo zusammen

Ich habe eine Webseite mittels JQuery ein wenig aufgepeppt. Auf der folgenden Seite werden zwei Effekte angewendet, ein SlideToggle und ein Überblenden mit dem Cycle-Plugin:
http://karatelyss.ch/aktuell

In Operar und Safari scheint das gut zu klappen. Firefox allerdings hat Probleme mit den Skripts. Wenn ich mir dort den Quelltext ansehe, scheint es, als würde Firefox bei der Javascript-Deklaration irgend was abschneiden.

Ich habe es schon mit Debuggern versucht, kam aber nicht gut zurecht. Weiss jemand einen Rat?

  1. Hellihello

    Ich habe es schon mit Debuggern versucht, kam aber nicht gut zurecht. Weiss jemand einen Rat?

    Ja, debuggen, bzw die Javscript-Konsole vom Firefox.

    Dank und Gruß,

    frankx

    --
    tryin to multitain  - Globus = Planet != Welt
    1. Lieber frankx,

      Ja, debuggen, bzw die Javscript-Konsole vom Firefox.

      hast Du denn unter der angegebenen URL in Deinem FF irgendwelche JS-Fehler erhalten...? Bei mir bleibt sie nämlich leer. Und damit hätte ich durch Deinen Rat keine Hilfe bekommen!

      Wenn Du das nächste Mal auf die Fehlerkonsole des FF verweist, wäre es nett, wenn Du vorher selbst nachgeschaut hättest, ob darin überhaupt etwas verwertbares auftaucht! Und wenn Du keine URL bekommst, dann darfst Du ja auch fragen, was beim OP ebendort steht. Manchmal weiß ein OP ja nicht, wo er dieses Werkzeug findet...

      Liebe Grüße,

      Felix Riesterer.

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

        Ja, debuggen, bzw die Javscript-Konsole vom Firefox.

        hast Du denn unter der angegebenen URL in Deinem FF irgendwelche JS-Fehler erhalten...? Bei mir bleibt sie nämlich leer. Und damit hätte ich durch Deinen Rat keine Hilfe bekommen!

        Du hast sicher Recht. Mein Rat sollte sich darauf beziehen, dass er mit dem debuggen nicht zurechtkäme. Das ist keine gute Idee, damit nicht zurecht zu kommen (;-). Und die Konsole findet man ja auch, wenn man denn weiß, dass es eine gibt. Diese Info steckte da ja als Rat auch mit drin. Aber es stimmt eben, dass man manchmal denen das Antworten überlassen sollte, die mehr Zeit und Mühen darauf verwenden.

        Dafür kam meine Antwort 1 Minute nach dem Post. Für manchen vielleicht auch was Wert. (Ich weiß, wenn der Inhalt nicht stimmt, dann hilft das auch nix).

        Dank und Gruß,

        Robert aka

        frankx

        --
        tryin to multitain  - Globus = Planet != Welt
  2. Lieber Bastian,

    http://karatelyss.ch/aktuell

    in Deinem HTML-Code finde ich folgende Zeile:

    <script type="text/javascript" src="http://karatelyss.ch/scripts/jquery.js" />

    Im Grunde hast Du ja eigentlich Recht, wenn Du selbstschließende Tags benutzt, die an ihrem Ende /> stehen haben. In der Praxis hat sich jedoch gezeigt, dass diverse Browser damit Probleme haben. Daher verwende die hier anscheinend umständlichere Schreibweise mit öffendem _und_ _schließendem_ Tag. Damit sähe diese Zeile dann so aus:

    <script type="text/javascript" src="http://karatelyss.ch/scripts/jquery.js"></script>

    Natürlich brauchst Du das in Deinem Code überall dort, wo Du im Moment noch selbstschließende script-Tags benutzt...

    Liebe Grüße,

    Felix Riesterer.

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

      <script type="text/javascript" src="http://karatelyss.ch/scripts/jquery.js" />

      Im Grunde hast Du ja eigentlich Recht, wenn Du selbstschließende Tags

      wirklich? Sieht die DTD wirklich leere script-Elemente vor? Wenn nein, dann ist es falsch. Wäre ein

      <title />

      Deiner Ansicht nach richtig und erlaubt? Wenn nein, dann kann auch <script [...] /> nur falsch sein. Vergleiche bitte:

      <!ELEMENT title (#PCDATA)>
      <!ATTLIST title
        %i18n;
        id          ID             #IMPLIED
        >

      <!-- script statements, which may include CDATA sections -->
      <!ELEMENT script (#PCDATA)>
      <!ATTLIST script
        id          ID             #IMPLIED
        charset     %Charset;      #IMPLIED
        type        %ContentType;  #REQUIRED
        src         %URI;          #IMPLIED
        defer       (defer)        #IMPLIED
        xml:space   (preserve)     #FIXED 'preserve'
        >

      Eine Google-Suche im Archiv war leider fruchtlos, da mir die Feineinstellungen der Forumssuche fehlen :-(

      Freundliche Grüße

      Vinzenz

      1. Wäre ein

        <title />

        Deiner Ansicht nach richtig und erlaubt?

        Ja, klar.

        <!ELEMENT title (#PCDATA)>
        <!ELEMENT script (#PCDATA)>

        PCDATA kann ein leere Zeichenkette sein.

        Mathias

        1. Hallo Mathias,

          Wäre ein

          <title />

          Deiner Ansicht nach richtig und erlaubt?

          Ja, klar.

          danke für die Info. Ich liebe HTML :-)

          Es liegt somit - wie Du bereits angeführt hast - nur daran, dass das XHTML als HTML ausgeliefert wird. Hoffentlich merk ich's mir, damit ich's beim nächsten Auftreten dieser Frage richtig beantworten kann. Wie wäre es mit Aufnahme in die Forums-FAQ? Ich hab' mal ein Ticket eröffnet.

          Freundliche Grüße

          Vinzenz

          1. Es liegt somit - wie Du bereits angeführt hast - nur daran, dass das XHTML als HTML ausgeliefert wird.

            Man muss drei Dinge auseinanderhalten:

            • Die Grammatik-Regeln von HTML 4 (SGML-DTD) und die theoretisch mögliche, zulässige SGML-Syntax,
            • Die Grammatik-Regeln von XHTML 1 (XML-DTD, XML Schema) und die theoretisch mögliche, zulässige XML-Syntax,
            • Der Verarbeitungsmodus der Browser (Tag-Soup oder XML) und dessen Limitierungen.

            Mischungen daraus ergeben, was in der Praxis möglich und sinnvoll ist.

            Mathias

    2. Im Grunde hast Du ja eigentlich Recht, wenn Du selbstschließende Tags benutzt, die an ihrem Ende /> stehen haben. In der Praxis hat sich jedoch gezeigt, dass diverse Browser damit Probleme haben. Daher verwende die hier anscheinend umständlichere Schreibweise mit öffendem _und_ _schließendem_ Tag. Damit sähe diese Zeile dann so aus:

      <script type="text/javascript" src="http://karatelyss.ch/scripts/jquery.js"></script>

      Besten Dank, Felix. Das war in der Tat das Problem. Wusste nicht, dass das script-Tag nicht selbstschliessend sein darf.

      @all:
      Effekt 1: Oben links auf "anmelden" klicken, dann blendet ein Formular ein. Effekt 2: Unter der blauen Linie rechts wechseln die Fotos mit Fade-Effekt.

      Den Debugger habe ich installiert. Irgendwann muss ich mich näher mit dem Ding auseinandersetzen.

      Besten Dank und Grüsse
      Bastian

  3. Hallo,

    Ich habe eine Webseite mittels JQuery ein wenig aufgepeppt. Auf der folgenden Seite werden zwei Effekte angewendet, ein SlideToggle und ein Überblenden mit dem Cycle-Plugin:
    http://karatelyss.ch/aktuell

    es wäre nett gewesen, zu erläutern, wo da etwas passieren soll :-) Ich sehe keine Effekte und erwarte auch nirgends welche.

    In Operar und Safari scheint das gut zu klappen. Firefox allerdings hat Probleme mit den Skripts. Wenn ich mir dort den Quelltext ansehe, scheint es, als würde Firefox bei der Javascript-Deklaration irgend was abschneiden.

    Leere script-Elemente sind - soweit ich mich erinnere - keine besonders gute Idee.

    Freundliche Grüße

    Vinzenz

  4. Hi,

    Ich habe eine Webseite mittels JQuery ein wenig aufgepeppt. Auf der folgenden Seite werden zwei Effekte angewendet, ein SlideToggle und ein Überblenden mit dem Cycle-Plugin:
    http://karatelyss.ch/aktuell

    Und *wo* da? Ich habe keine Lust, dort so lange wahllos herumzuklicken, bis sich irgendein Effekt zeigt oder auch nicht.

    Firefox allerdings hat Probleme mit den Skripts. Wenn ich mir dort den Quelltext ansehe, scheint es, als würde Firefox bei der Javascript-Deklaration irgend was abschneiden.

    Und woher kommt dieser "Anschein"? Was hast du wie ueberprueft?

    Ich habe es schon mit Debuggern versucht, kam aber nicht gut zurecht. Weiss jemand einen Rat?

    *Lerne* Debuggen.
    Die FireBug-Extension fuer den FireFox ist fuers Debugging ein gutes Werkzeug. Schau dir an, was man damit alles machen kann.

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“
  5. Hallo,

    du verwendest XHTML 1.0, lieferst es aber als text/html aus (HTML-kompatibles XHTML). Daher verwenden die Browser keinen XML-Parser zum Verarbeiten des Codes, sondern ihren HTML-Parser - den man auch Tag-Soup-Parser nennt, weil er nicht wirklich definierten Regeln folgt, sondern sehr fehlertolerant und gemäß eigenem Ermessen Markup in einen DOM-Baum überführt.

    Wenn du die XML-typische Schreibweise für leere Elemente benutzt
    <element ... />
    Dann haben die Browser damit u.U. Probleme, wenn das Dokument als text/html verarbeitet wird. Bei Elementen, deren End-Tag schon in HTML optional ist, kannst du das machen, z.B. <meta />, <br />, <input /> usw.

    Aber der End-Tag von script ist in HTML nicht weglassbar, also erwarten ihn einige Browser (hier Firefox) zwingend. <script /> wird vom Firefox nicht als ganzes Element umgesetzt, sondern nur als Start-Tag interpretiert!

    Wenn du also schreibst:

    <script type="text/javascript" src="http://karatelyss.ch/scripts/jquery.js" />

    <script type="text/javascript">

    $(document).ready(function() {
       $("#logintoggle").click(function() {
           $("#loginform").slideToggle("slow");
          });
      });

    </script>

    Dann parst Firefox das folgendermaßen: Er sieht <script src="..." /> als ein script-Start-Tag mit einem src an. Wenn er das findet, dann ignoriert er den Inhalt dieses Elements und lädt nur das externe Script.
    Was danach kommt, sieht er als Inhalt des script-Elements an. <script type="text/javascript"> ignoriert er, weil es es als script-Inhalt ansieht.
    Erst </script> sieht er schließlich als End-Tag des script-Elements an und schließt es damit.

    Es kommt also *ein* script-Element mit src-Attribut heraus und einem Inhalt, den Firefox gänzlich ignoriert.

    Solche Elemente solltest du in HTML-kompatiblem XHTML immer vollständig notieren, auch wenn sie leer sind:

    <script ...></script>

    Mathias

    1. @@molily:

      Bei Elementen, deren End-Tag schon in HTML optional ist, kannst du das machen, z.B. <meta />, <br />, <input /> usw.

      Oh, da gibt’s wieder ein paar Erbsen zu zählen! >;-)

      Bei leeren Elementen 'meta', 'br', 'input' ist ein End-Tag in HTML nicht optional, sondern verboten.

      Optional wäre ein End-Tag bspw. bei 'td' und 'li', weshalb man in XHTML problemlos <td/> und <li/> schreiben könnte, wenn man keinen Inhalt darin unterzubringen hat.

      Live long and prosper,
      Gunnar

      --
      Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)
      1. Bei leeren Elementen 'meta', 'br', 'input' ist ein End-Tag in HTML nicht optional, sondern verboten.

        leere elemente könnten aber in html dennoch geschlossen werden - aber nur durch SHORTTAG, nicht als start-/endtag-paar

        valide:

        <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">  
        <html>  
        <head>  
        <title>weee</title>  
        </head>  
        <body>  
         <p>foo<br />bar</p>  
        </body>  
        </html>  
          
        <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">  
        <html>  
        <head>  
        <title>weee</title>  
        </head>  
        <body>  
         <p>foo<br//bar</p>  
        </body>  
        </html>  
        
        

        nicht valide:

        <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">  
        <html>  
        <head>  
        <title>weee</title>  
        </head>  
        <body>  
         <p>foo<br></br>bar</p>  
        </body>  
        </html>
        

        Optional wäre ein End-Tag bspw. bei 'td' und 'li'

        dafür ist aber NETENABL (null end tag enable) verantwortlich - eine schreibweise <li>foo</li> ist genauso gültig wie <li>foo oder <li/foo/

        NETENABL ist übrigens implizit erlaubt, wenn SHORTTAG erlaubt ist

        in xml ist null end tag übrigens derart definiert, dass eben nur <element />  als leeres element erlaubt ist

        alles in allem sind diese sachen sehr sgml-spezifisch und begründen sich darauf, dass html 4.01 leider sehr inkonseqent in bezug auf die mangelhafte sgml-unterstützung der browser war/ist und als empfehlung herrausgegeben wurde, obwohl klar war, dass viele features garnicht richtig unterstützt werden

        aus dem grund kann man "normalen menschen" oder "anfängern" immer wieder nahelegen, sich mit xhtml anzufreunden, da die syntax aufgrund der konsequent gestrichenen features leichter und einfacher verständlich ist

        auch wenn OMITNAME-konstrukte wie disabled="disabled" etwas komisch wirken, die ist xhtml alles in allem dennoch leichter verständlich ;)

        1. @@suit:

          Bei leeren Elementen 'meta', 'br', 'input' ist ein End-Tag in HTML nicht optional, sondern verboten.
          leere elemente könnten aber in html dennoch geschlossen werden - aber nur durch SHORTTAG, nicht als start-/endtag-paar

          ?? SHORTTAG schließt doch das Start-Tag? Was hat das damit zu tun, dass ein End-Tag bei leeren Elementtypen in HTML verboten ist?

          Live long and prosper,
          Gunnar

          --
          Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)
          1. ?? SHORTTAG schließt doch das Start-Tag? Was hat das damit zu tun, dass ein End-Tag bei leeren Elementtypen in HTML verboten ist?

            SHORTTAG ist an eine Reihe von Features geknüpft (bzw. ist eine Überkategorie davon) - für das explizite Schließen der Start-Tags (bzw. das Erlauben diverser Kurzschreibweisen) ist die Kategorie STARTTAG mit den Unterpunkten EMPTY, UNCLOSED oder NETENABL verantwortlich

            NETENABL steht zwangsläufig auf ALL, wenn SHORTTAG auf YES gesetzt wurde - darum sind in HTML prinzipiell mal all diese schreibweisen erlaubt

            für <foo /> = geschlossen ist also NETENABL verantwortlich (als Unterpunkt von SHORTTAG), nicht direkt SHORTTAG selbst

            Und jetzt zur eigentlichen Frage, was es damit zu tun hat:

            Für die Sache, die das End-Tag bei leeren Elementen verbietet, ist eben auch SHORTTAG verantwortlich nur eben nicht die Kategorie STARTTAG sondern ENDTAG

            Weitere Infos z.B. hier:
            http://www.is-thought.co.uk/book/sgml-4.htm#Shorttag
            [http://www.is-thought.co.uk/book/sgml-9.htm#NET]