Philipp Hasenfratz: Anker will nicht ;-)

Halihallo Forumer

Ich generiere serverseitig einen Report (Report-Bestandteile über POST bekommen, vielleicht von Wichtigkeit). Jene hat oben einige Links zu Ankern im Dokument; nur die Anker werden "ignoriert" und die Startseite geöffnet (von Seiten des Betrachters gesehen). Nun zum technischen:

<a href="#section1">bla</a>

... much stuff

<a name="section1" id="section1" />

Hier soll er hin.

... much stuff

von Wichtigkeit ist des weiteren: Der Report wird in einem Frameset angezeigt, wobei die top-URL "http://www.admazing.ch/" ist. In der Statusanzeige des Browsers wird "http://www.admazing.ch/#section1" angezeigt. Beim Klick wird unsere "Startseite"! angezeigt, das ist wohl nicht in meinem Sinne. Der "Bug" betrifft IE, der die Startseite öffnet, ein Opera, der gar nix macht und zwei NS, wo ich nicht testen konnte.

Hat jemand einen Tipp, wie ich das Lösen kann?

Ich dachte schon an eine JavaScript methode, wo ich ein moveTo ausführe und zur Stelle scrolle. Wie könnte ich das realisieren? - Meine Versuche sind bisher gescheitert:

Wie kann ich die absolute Position eines <a name="..."> - Tags finden?

Viele Grüsse

Philipp

PS: Ein kleines *schäm* am Ende des Postings... ;)

  1. von Wichtigkeit ist des weiteren: Der Report wird in einem Frameset angezeigt, wobei die top-URL "http://www.admazing.ch/" ist.

    Vieleicht brauchst du noch eine target="frame" angabe in deinem Link, also
    <a href="#section1" traget="DerGewünschteFrame">bla</a> ?

    1. Halihallo Sebastian

      von Wichtigkeit ist des weiteren: Der Report wird in einem Frameset angezeigt, wobei die top-URL "http://www.admazing.ch/" ist.

      Vieleicht brauchst du noch eine target="frame" angabe in deinem Link, also
      <a href="#section1" traget="DerGewünschteFrame">bla</a> ?

      Stimmt, darauf hätte ich auch kommen sollen; nur leider hatte dies keinen Einfluss; das Target-Attribut bestimmt nur den Zielframe; leider ist die Page die geladen wird nach wie vor "http://www.admazing.ch/#section1" statt nur #section1 (Sprung auf jene Stelle im Dokument). Das Target-Attribut hatte nicht die gewünschte Wirkung, dass es das Dokument indem herumgesprungen werden soll definiert. Das Target-Attribut bestimmt leider lediglich, wo das "Resultat" angezeigt werden soll; leider ist dies nicht das Problem, sondern das Resultat selber (der Ancor bezieht sich _immer_ auf die Top-Url, die sich in der Adressleiste befindet, nicht auf das Dokument [Report] im Frame).

      Viele Grüsse

      Philipp

      PS: Danke an alle für die Tipps und schnellen Antworten

  2. hi,
    hab mir die Seite nicht angeschaut. aber falls sie seeeehr lang ist, könnte das problem sein, dass er zu einem anker springen soll, wenn der teil der seite, auf dem das ziel des springes steht, noch garnicht da ist. hth

    1. Halihallo wo2001

      hab mir die Seite nicht angeschaut. aber falls sie seeeehr lang ist, könnte das problem sein, dass er zu einem anker springen soll, wenn der teil der seite, auf dem das ziel des springes steht, noch garnicht da ist. hth

      Wäre eine Möglichkeit, die ich (leider) ausschliessen kann. Die Page wird vollständig geladen und der Effekt tritt dennoch auf :-(

      Viele Grüsse

      Philipp

  3. Hallo Philipp,

    <a name="section1" id="section1" />

    a ist nicht leer, da muss schon was drinstehen: <a name="section1" id="section1">Textaufdenverwiesewird</a>

    der Validator bringt doch bestimmt auch eine Fehlermeldung, oder?

    Grüße aus Nürnberg
    Tobias

    1. Halihallo Tobias

      <a name="section1" id="section1" />
      a ist nicht leer, da muss schon was drinstehen: <a name="section1" id="section1">Textaufdenverwiesewird</a>

      Das mag bei a-tags mit href-attribut Sinn machen, jedoch nicht bei a-tags mit name-attribut, welche einen Ancor erzeugen. Aber möglich, dass dies die DTD so vorsieht, ich weiss es nicht.

      der Validator bringt doch bestimmt auch eine Fehlermeldung, oder?

      Ach, der bringt bei dieser Seite leider zu viele. Glaube jedoch nicht, dass dies die Browser grossartig stören sollte und die genannten (ungewollten) Effekte hervorruft.

      Viele Grüsse

      Philipp

      1. Hi,

        a ist nicht leer, da muss schon was drinstehen: <a name="section1" id="section1">Textaufdenverwiesewird</a>

        Das mag bei a-tags mit href-attribut Sinn machen, jedoch nicht bei a-tags mit name-attribut, welche einen Ancor erzeugen. Aber möglich, dass dies die DTD so vorsieht, ich weiss es nicht.

        Zumindest in meiner Erfahrung ist es nur bei IE wirklich sicher einen "leeren" anchor-tag zu verwenden. Die meisten anderen Browser wollen irgendwas, mindestens einen <!--Kommentar-->, drin haben, sonst tut sich nichts.

        Gruss, Mel

  4. Halihallo zusammen

    Ich dachte schon an eine JavaScript methode, wo ich ein moveTo ausführe und zur Stelle scrolle. Wie könnte ich das realisieren? - Meine Versuche sind bisher gescheitert:

    Wie kann ich die absolute Position eines <a name="..."> - Tags finden?

    Wenn keine Tipps mehr kommen, folgere ich, dass es sich anscheinend um einen Bug handelt (hervorgerufen durch die Frames, mit grösster Wahrscheinlichkeit, ohne funktioniert's nämlich), demnach beschäftige ich mich mit der Alternative über JavaScript:

    var el = document.getElementById("section1").position.top;

    geht net, leider. Kann mir jemand sagen, wie dann? - Wie kriege ich die vertikale Position des Ancors (vergl. auch document.ancors[...].y nur leider nur in NS4).

    Viele Grüsse

    Philipp

  5. Hallo Philipp,

    erstens: <a name="section1" id="section1" />

    ist tatsächlich nicht erlaubt - <a name="section1" id="section1"></a> dagegen schon.

    Dein Problem hängt aber mit einem Bug im IE zusammen - tatsächlich springt er solche leeren Anker _manchmal_ nicht an. Ich hatte mal eine Folge von etwa 15 solcher Anker, von denen 10 angesprungen wurden und 5 nicht. Der Workaround war: irgendwas in den Anker rein tun - bei mir war das ein 2x2 Pixel großes Leer-GIF.

    Grüße,

    Utz

    1. Halihallo Utz und Mel

      erstens: <a name="section1" id="section1" />

      ist tatsächlich nicht erlaubt - <a name="section1" id="section1"></a> dagegen schon.

      ACK.

      Dein Problem hängt aber mit einem Bug im IE zusammen - tatsächlich springt er solche leeren Anker _manchmal_ nicht an. Ich hatte mal eine Folge von etwa 15 solcher Anker, von denen 10 angesprungen wurden und 5 nicht. Der Workaround war: irgendwas in den Anker rein tun - bei mir war das ein 2x2 Pixel großes Leer-GIF.

      hätt ich mir ja denken können ;-)
      Scheiss Browser (:-)), auch mit Kommentar oder leerem GIF drinne woll'n die nicht, leider. Ich vermute, dass dies wohl ein Problem ist, jedoch das alte (wegen-Frame-Ancor-nicht-anspringen) noch davor ist und dieses muss erst gelöst werden (das zweite wäre wohl gleich danach gekommen). Ich bin mir ziemlich sicher, dass es an diesem Frame hängt, den ich leider nicht "überschreiben" darf (sonst hätt ich die Frames schon lange rausgeschmissen)...

      Viele Grüsse und Danke an euch

      Philipp

      1. Hi!

        Du mußt natürlich den Dateinamen der Datei die im Frame geladen werden soll angeben! / bezieht sich auf die Hauptdatei und das ist nunmal ein Frameset in dem der Anker garantiert nicht vorkommt. Wenn der Link im selben Frame steht sollte es meines erachtens gehen, aber das muß nichts heißen ;-)
        Also einfach <a href="dateiname.html#section_xy">link</a>, dann solte es gehen. Wenn Du den Inhalt nicht im selben Frame des Links öffnen willst, brauchst Du noch ein target.

        Grüße
        Andreas

        1. Halihallo Andreas

          Du mußt natürlich den Dateinamen der Datei die im Frame geladen werden soll angeben!

          Nö. Ohne Angabe der Datei muss (sorry, sollte) die aktuelle Datei verwendet werden.

          bezieht sich auf die Hauptdatei und das ist nunmal ein Frameset in dem der Anker garantiert nicht vorkommt. Wenn der Link im selben Frame steht sollte es meines erachtens gehen, aber das muß nichts heißen ;-)

          _genau_ das ist es ja! - Der Link steht im _selben_ Frame und ich will innerhalb der Datei (Link und Anker in derselben Datei) herumspringen... Aber eben...

          Also einfach <a href="dateiname.html#section_xy">link</a>, dann solte es gehen. Wenn Du den Inhalt nicht im selben Frame des Links öffnen willst, brauchst Du noch ein target.

          tja, der Report wird basierend auf Kundeneingaben generiert (POST-Formular mit Optionen) => is nix mit dateiname.html, sonst hätt ich das schon lange so gemacht.

          Naja, ich hasse Browser :-)

          Viele Grüsse

          Philipp

          1. Hallo!

            Du mußt natürlich den Dateinamen der Datei die im Frame geladen werden soll angeben!

            Nö. Ohne Angabe der Datei muss (sorry, sollte) die aktuelle Datei verwendet werden.

            Aber das gilt anscheinend so nicht für Frames!

            _genau_ das ist es ja! - Der Link steht im _selben_ Frame und ich will innerhalb der Datei (Link und Anker in derselben Datei) herumspringen... Aber eben...

            Trotzdem, _was spricht dagegen_ den eigenen Dateinamen vor die Links zu setzen?

            Also einfach <a href="dateiname.html#section_xy">link</a>, dann solte es gehen. Wenn Du den Inhalt nicht im selben Frame des Links öffnen willst, brauchst Du noch ein target.

            tja, der Report wird basierend auf Kundeneingaben generiert (POST-Formular mit Optionen) => is nix mit dateiname.html, sonst hätt ich das schon lange so gemacht.

            Das dachte ich mir schon, aber in PHP gibt es z.B. print($_SERVER["PHP_SELF"]), Du willst mir doch jetzt nicht erzählen das es sowas in PERL ncht gibt, oder? Wenn es das nicht gibt bemnutz doch PHP ;-)))
            Aber das steht aucvh in anderen Umgebungsvariablen des Apache, z.B. $_ENV["SCRIPT_FILENAME"]... und in vielen anderen, an irgendwas davon wird doch auch PERL kommen! Und zur Not mußt Du den Dateinamen noch aus dem Pfad extrahieren.

            Naja, ich hasse Browser :-)

            Ich auch ;-)
            Vor allem NN4 ;-)

            Grüße
            Andreas

            1. Halihallo Andreas

              Du mußt natürlich den Dateinamen der Datei die im Frame geladen werden soll angeben!

              Nö. Ohne Angabe der Datei muss (sorry, sollte) die aktuelle Datei verwendet werden.

              Aber das gilt anscheinend so nicht für Frames!

              Sollte, aber anscheinend meinen das die Browser-Programmierer anders :-(

              _genau_ das ist es ja! - Der Link steht im _selben_ Frame und ich will innerhalb der Datei (Link und Anker in derselben Datei) herumspringen... Aber eben...

              Trotzdem, _was spricht dagegen_ den eigenen Dateinamen vor die Links zu setzen?

              Da ich dann die Informationen, über was der Report angefertigt werden soll verliere.

              Also einfach <a href="dateiname.html#section_xy">link</a>, dann solte es gehen. Wenn Du den Inhalt nicht im selben Frame des Links öffnen willst, brauchst Du noch ein target.

              tja, der Report wird basierend auf Kundeneingaben generiert (POST-Formular mit Optionen) => is nix mit dateiname.html, sonst hätt ich das schon lange so gemacht.

              Das dachte ich mir schon, aber in PHP gibt es z.B. print($_SERVER["PHP_SELF"]), Du willst mir doch jetzt nicht erzählen das es sowas in PERL ncht gibt, oder? Wenn es das nicht gibt bemnutz doch PHP ;-)))

              Pfui, ich doch nicht! :-))
              Ne, im ernst: Doch, sowas solls auch in Perl geben (*g*), aber aus oben genannten Gründen kann ich das nicht. Natürlich, ich könnte irgendeine ID mit der Conf über GET übergeben, oder mit Cookies arbeiten, aber um himmels willen, ich hab noch eine mehrseitige Todo-Liste und will nicht wegen Ankern das ganze Programm ändern.

              Aber das steht aucvh in anderen Umgebungsvariablen des Apache, z.B. $_ENV["SCRIPT_FILENAME"]... und in vielen anderen, an irgendwas davon wird doch auch PERL kommen! Und zur Not mußt Du den Dateinamen noch aus dem Pfad extrahieren.

              Ja ;)

              Naja, ich hasse Browser :-)
              Ich auch ;-)
              Vor allem NN4 ;-)

              Full ACK, leider :-)

              Viele Grüsse

              Philipp

              1. Hi!

                Hat denn der User nur eine Seite? Wenn nicht mußt Du das doch auch an anderer Stelle irgendwie regeln. Und sonst, dann könntest Du für den Bericht ein eigenes Browserfenster öffnen, oder, wenn das wie ich vermute nicht gewünscht ist Dir ein Javascript überlegen, oder das wie gesagt serverseitig lösen. Bei der Javascript-Variante kann  ich Dir leider nicht helfen, denn mit Javascript stehe ich auf dem Kriegsfuß ;-)
                Wundert mich allerdings das das nicht so einfach funktioniert, naja. Aber die meisten Leute hier haben eh mehr Ahnung von HTML als meinr Wenigkeit, also noch ist nichts verloren :-)

                Grüße
                Andreas

                1. Halihallo Andreas

                  Hat denn der User nur eine Seite?

                  Einen Report, ja. Ist alles in die selbe Page gepackt.

                  Wenn nicht mußt Du das doch auch an anderer Stelle irgendwie regeln. Und sonst, dann könntest Du für den Bericht ein eigenes Browserfenster öffnen

                  Na, wenn's nicht sein muss, dann lieber nicht.

                  oder, wenn das wie ich vermute nicht gewünscht ist Dir ein Javascript überlegen

                  hab ich ja schon, aber ich krieg die absolute Position der Anker nicht raus...

                  oder das wie gesagt serverseitig lösen. Bei der Javascript-Variante kann  ich Dir leider nicht helfen, denn mit Javascript stehe ich auf dem Kriegsfuß ;-)

                  Tja, ich ja auch :-((

                  Wundert mich allerdings das das nicht so einfach funktioniert, naja. Aber die meisten Leute hier haben eh mehr Ahnung von HTML als meinr Wenigkeit, also noch ist nichts verloren :-)

                  Nö, so einfach lass ich mich von den Browsern net verarschen :-)
                  Hab einfach alles in GET gepackt und füllt die Links damit (damit wird leider der Report immer neu generiert, aber das ganze braucht nicht allzuviel Performance) => gelöst, nur wie? - Ich hasse solche Lösungen, aber im Moment steh ich eben auch mit Zeit auf'm Kriegsfuss...

                  Buddeln wir das Kriegsbeil aus!

                  Viele Grüsse

                  Philipp

                  1. Hi!

                    Einen Report, ja. Ist alles in die selbe Page gepackt.

                    alles in eine Datei? Ziemlich eng, aber dann sehe ich auch keine andere Möglichkeit.

                    oder das wie gesagt serverseitig lösen. Bei der Javascript-Variante kann  ich Dir leider nicht helfen, denn mit Javascript stehe ich auf dem Kriegsfuß ;-)

                    Tja, ich ja auch :-((

                    Jajaja, wir habens schon schwer, dabei ist Javascript so leicht, man müßte sich nur mal mit einer etwas anderen Grundeinstellung damit auseinandersetzen... aber immer wenn ich was neues in Javascritp brauche bekomme ich schon vorher Bauschmerzen ;-)

                    Wundert mich allerdings das das nicht so einfach funktioniert, naja. Aber die meisten Leute hier haben eh mehr Ahnung von HTML als meinr Wenigkeit, also noch ist nichts verloren :-)

                    Nö, so einfach lass ich mich von den Browsern net verarschen :-)
                    Hab einfach alles in GET gepackt und füllt die Links damit (damit wird leider der Report immer neu generiert, aber das ganze braucht nicht allzuviel Performance) => gelöst, nur wie? - Ich hasse solche Lösungen, aber im Moment steh ich eben auch mit Zeit auf'm Kriegsfuss...

                    Vieleicht könnte man den Report auch nur einmal generieren und als html speichern, naja, aber die Reports werden ja nicht ganz so oft angesehen, vermute ich jetzt mal ;-)

                    Grüße
                    Andreas

                    1. Halihallo Andreas

                      Einen Report, ja. Ist alles in die selbe Page gepackt.

                      alles in eine Datei? Ziemlich eng, aber dann sehe ich auch keine andere Möglichkeit.

                      Naja, etwa vier A4 Seiten sinds ausgedruckt schon, aber das ist nicht so arg. Wenn's kleiner sein soll, kann der Kunde ja die gewünschten Reportbestandteile eingeben, die ihn interessieren.

                      oder das wie gesagt serverseitig lösen. Bei der Javascript-Variante kann  ich Dir leider nicht helfen, denn mit Javascript stehe ich auf dem Kriegsfuß ;-)

                      Tja, ich ja auch :-((
                      Jajaja, wir habens schon schwer, dabei ist Javascript so leicht, man müßte sich nur mal mit einer etwas anderen Grundeinstellung damit auseinandersetzen... aber immer wenn ich was neues in Javascritp brauche bekomme ich schon vorher Bauschmerzen ;-)

                      naja, ich bin ziemlich von JS weggekommen, versuche alles serverseitig, natürlich geht das nur bedingt und für alles andere, muss ich eben leiden :-)

                      Wundert mich allerdings das das nicht so einfach funktioniert, naja. Aber die meisten Leute hier haben eh mehr Ahnung von HTML als meinr Wenigkeit, also noch ist nichts verloren :-)

                      Nö, so einfach lass ich mich von den Browsern net verarschen :-)
                      Hab einfach alles in GET gepackt und füllt die Links damit (damit wird leider der Report immer neu generiert, aber das ganze braucht nicht allzuviel Performance) => gelöst, nur wie? - Ich hasse solche Lösungen, aber im Moment steh ich eben auch mit Zeit auf'm Kriegsfuss...
                      Vieleicht könnte man den Report auch nur einmal generieren und als html speichern, naja, aber die Reports werden ja nicht ganz so oft angesehen, vermute ich jetzt mal ;-)

                      Stimmt, warum ist mir das nicht eingefallen? ;)
                      Eigentlich hast du recht, der Report wird ja bei Klick auf die Ancors nicht geändert, da könnte man natürlich einmal eine .html Page erstellen und diese dann einfach in den Links angeben. Wäre viel besser. Nur: Das Zeug dürfte nicht in cgi-bin gelagert werden => jeder hätte Zugriff darauf (klar, das könnte man ändern, htaccess oder ein anderes Script für Authentifizierung, aber das ist zuviel Aufwand für nix). Oder ich müsste einen report_viewer schreiben, welcher kurz eine Authentifizierung durchführt und dann die .html Datei einfach ausgibt. Der Vorschlag eine html zu generieren ist sehr gut, nur ist es mir den Zeitaufwand nicht wirklich wert. Du sagst selber: die Reports werden ja nicht ganz so oft angesehen... Genau deshalb spielt es auch keine Rolle, wenn mal etwas aperformant umgesetzt ist ;)

                      Viele Grüsse

                      Philipp