magic: document.write Link zusammenstellen und anzeigen

Hallo! Ich habe zwar gute HTML-Kenntnisse, aber Javascript ist so ein Thema. In diesem Forum habe ich mehrfach gesucht, bin aber nicht fündig geworden. Ich möchte einen Link aus Variablen zusammenstellen und im Browser anzeigen...

Der Link:
http://www.abc.de/gp/redirect.html?ie=UTF8&location=http%3A%2F%2Fwww.abc.de%2Fs%3F%5F%5Fmk%5Fde%5FDE%3D%25C5M%25C5Z%25D5%25D1%26url%3Dsearch-alias%253Ddvd%26field-keywords%3Dkeyword&site-redirect=de&tag=efghi-21&linkCode=ur2&camp=1638&creative=6742

Funktioniert (natürlich) nicht:

<script language="JavaScript"><!--
var linka = "http://www.abc.de/gp/redirect.html?ie=UTF8&location=http%3A%2F%2Fwww.abc.de%2Fs%3F%5F%5Fmk%5Fde%5FDE%3D%25C5M%25C5Z%25D5%25D1%26url%3Dsearch-alias%253D";
var prod  = "dvd";
var linkb = "%26field-keywords%3D";
var keyw  = "keyword";
var linkc = "&site-redirect=de&tag=efghi-21&linkCode=ur2&camp=1638&creative=6742";
var linktext = "Nach xyz suchen";
document.write('<a href="linka+prod+linkb+keyw+linkc"> onmouseover="window.status='Öffnet weitere Möglichkeiten'; return true">');
// --></script>

Wie wäre das richtig umzusetzen und wie baue ich den Linktext ein?

  1. http://www.abc.de/gp/redirect.html?ie=UTF8&location=http%3A%2F%2Fwww.abc.de%2Fs%3F%5F%5Fmk%5Fde%5FDE%3D%25C5M%25C5Z%25D5%25D1%26url%3Dsearch-alias%253Ddvd%26field-keywords%3Dkeyword&site-redirect=de&tag=efghi-21&linkCode=ur2&camp=1638&creative=6742

    Funktioniert (natürlich) nicht:

    Wieso benutz du nicht eine Funktion, die für das kodieren zuständig ist, dann kannst du den Link lesbar schreiben.

    Entweder encodeURI oder encodeURIComponent oder escape

    <script language="JavaScript"><!--

    Naja, gut Kenntnisse in HTML sind das nicht, da fehlt ein Pflichtattribut und das language Attribut ist seit ca. 10 Jahren unerwünscht und sollte daher nicht benutzt zu werden.

    Wie wäre das richtig umzusetzen und wie baue ich den Linktext ein?

    Auch um einen Link zu erzeugen gibt es eine Funktion: String.link()

    Struppi.

    1. Danke, Struppi. Ich werde es versuchen.

    2. Funktioniert leider gar nicht...

      <script type="text/javascript">
      var linka = "http://www.abc.de/gp/redirect.html?ie=UTF8&location=http%3A%2F%2Fwww.abc.de%2Fs%3F%5F%5Fmk%5Fde%5FDE%3D%25C5M%25C5Z%25D5%25D1%26url%3Dsearch-alias%253D";
      var prod  = "dvd";
      var linkb = "%26field-keywords%3D";
      var keyw  = "keyword";
      var linkc = "&site-redirect=de&tag=efghi-21&linkCode=ur2&camp=1638&creative=6742";
      var linktext = "Nach "+keyw+" suchen";

      var Adresse =
      encodeURI("'+linka+prod+linkb+keyw+linkc'");

      document.write('<a target="_blank" href="' + Adresse + '">'+linktext+'</a> onmouseover="window.status='Öffnet weitere Möglichkeiten'; return true">');
      </script>

      Was ist falsch?

      1. Funktioniert leider gar nicht...

        Das ist keine Fehlerbeschreibung.

        Was ist falsch?

        Das steht in der Fehlerkonsole wenn du Firefox benutzt oder in der Fehlermeldung (die du nach einem Doppelklick auf das Ausrufezeichen in der Statusleiste erhälst) im IE.

        Struppi.

        1. Ich finde das klasse. Nicht nur antworten, sondern Tipps geben und selbst machen. Dann lerne ich das wenigstens etwas. Danke soweit!

          Fehlerbeschreibung:
          Der IE zeigt nichts an.

          Fehlermeldung IE:
          Zeile: 24
          Zeichen: 105
          Fehler: ')' erwartet
          Code: 0

          Würde bedeuten, er erwartet vor dem Öffnet bei Zeichen 105 Klammer zu:
          ..."window.status=')Öffnet weitere...
          (?!)

          Firefox ist auch nicht informativer:
          missing ) after argument list
          Er sagt, dass das ) hinter dem Ö kommt: Ö)ffnet

          Ich stehe auf dem Schlauch... ;-)

          1. Ich finde das klasse. Nicht nur antworten, sondern Tipps geben und selbst machen. Dann lerne ich das wenigstens etwas. Danke soweit!

            Bitte - aber das ist auch für meinereiner oft einfacher, anstatt zuversuchen den Code zu säubern - einfach Code kopieren, Fehler sehen und dir unter die Nase reiben ;-)

            Firefox ist auch nicht informativer:
            missing ) after argument list
            Er sagt, dass das ) hinter dem Ö kommt: Ö)ffnet

            Ich stehe auf dem Schlauch... ;-)

            Vielleicht hilft dir ja Patricks Erklärung, du hast deinen komplexe Ausgabestring etwas verhauen. Im Zweifelsfall hilft es bei sowas, den String Schritt für Schritt zusammen zu bauen und dann erst ausgeben.

            z.b. so:

            var ausgabe_text = 'ein String'  
            + eine_variabel  
            + eine_funktion()  
            + ' und hintendran ein String'  
            + noch_ne_funktion('mit einem String')  
            ;  
            alert(ausgabe_text);  
            
            

            Struppi.

            1. z.b. so:

              var ausgabe_text = 'ein String'

              • eine_variabel
              • eine_funktion()
              • ' und hintendran ein String'
              • noch_ne_funktion('mit einem String')
                ;
                alert(ausgabe_text);
              
              > Struppi.  
                
              Danke, Struppi. Wobei das noch etwas zu hoch für mich ist...
              
      2. Hallo magic!

        Mit encodeURI habe ich mich nicht beschäftigt, aber schon dein document.write ist fehlerhaft. Du benutzt einfache Anführungszeichen als String-Delimiter, sie dürfen im String nicht mehr (unmaskiert) vorkommen. Die Zeichenkettenverknüpfung mit »Adresse« und »linktext« hast Du zwar richtig, aber der Fehler ist weiter hinten!

        SD = Start-String-Delimiter
        ED = End-Delimiter

        document.write(
        '<a target="_blank" href="' + Adresse + '">'+linktext+'</a>
        ^SD                       ^ED           ^SD^ED        ^SD
        onmouseover="window.status='Öffnet weitere Möglichkeiten'; return true">');
                                   ^aha...... Dein String endet hier, mit dem
                                    Rest kann JavaScript nichts anfangen = Fehler!

        Pack den Text in einer Variable, dann vermeidest Du den Anführungszeichen-Hickhack.

        Außerdem schließt Du den a-Tag und schreibst danach das Attribut onmouseover? Soll das Text sein?

          
        var wsText = "Öffnet weitere Möglichkeiten";  
          
        document.write('<a target="_blank" href="' + Adresse + '" onmouseover="window.status=wsText; return true">' +linktext+ ' <\/a>');  
        
        

        Bedenke, dass moderne Browser die Option bieten, ein Überschreiben der Statuszeile zu unterbinden.

        Viele Grüße aus Frankfurt/Main,
        Patrick

        --

        _ - jenseits vom delirium - _
        [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
        Nichts ist unmöglich? Doch!
        Heute schon gegökt?
        1. Hallo Patrick,

          danke Dir!

          Den window.status hab ich mal herausgenommen. Ist nicht so wichtig.

          encodeURI funktioniert jetzt nicht. Ich lese erstmal weiter...

        2. Diesen Code habe ich jetzt:

          <script type="text/javascript">
          var linka = "http://www.abc.de/gp/redirect.html?ie=UTF8&location=http%3A%2F%2Fwww.abc.de%2Fs%3F%5F%5Fmk%5Fde%5FDE%3D%25C5M%25C5Z%25D5%25D1%26url%3Dsearch-alias%253D";
          var prod  = "dvd";
          var linkb = "%26field-keywords%3D";
          var keyw  = "keyword";
          var linkc = "&site-redirect=de&tag=efghi-21&linkCode=ur2&camp=1638&creative=6742";
          var linktext = "Nach "+keyw+" suchen";
          var Adresse =
          encodeURI("'+linka+prod+linkb+keyw+linkc'");
          document.write('<a target="_blank" href="' + Adresse + '">'+linktext+'</a>');
          </script>

          Im IE wird der Link richtig dargestellt. (Erfolg!)
          Aber:
          "file:///C:/Dokumente%20und%20Einstellungen/User/Desktop/"+linka+prod+linkb+keyw+linkc" wurde nicht gefunden...

          Warum wird die Zusammenstellung nicht in eine URL umgewandelt?

          1. <script type="text/javascript">
            var linka = "http://www.abc.de/gp/redirect.html?ie=UTF8&location=http%3A%2F%2Fwww.abc.de%2Fs%3F%5F%5Fmk%5Fde%5FDE%3D%25C5M%25C5Z%25D5%25D1%26url%3Dsearch-alias%253D";

            Du musst hier die URL nicht kodieren, dass machen die genannten Encode Funktionen für dich.

            var prod  = "dvd";
            var linkb = "%26field-keywords%3D";
            var keyw  = "keyword";
            var linkc = "&site-redirect=de&tag=efghi-21&linkCode=ur2&camp=1638&creative=6742";
            var linktext = "Nach "+keyw+" suchen";

            und hier kannst du die von mir genannte Funktion link() verwenden.
            document.write(linktext.link(encodeURI(linka + prod + linkb + keyw + linkc)));

            Struppi.

          2. Hallo magic!

            var Adresse =
            encodeURI("'+linka+prod+linkb+keyw+linkc'");
            document.write('<a target="_blank" href="' + Adresse + '">'+linktext+'</a>');

            Ergänzend zu Struppis Tipps...

            Dein Problem scheint mir ein mangeldes Verständnis davon, wann Anführungszeichen notwendig sind und wann nicht!

            Wenn Du einer Funktion (wie z.B. write() oder eben encodeURI()) direkt eine Zeichenkette (String) übergibst, soll diese in Anführungszeichen stehen:

            document.write('Hallo Welt');

            Wenn Du Variablen benutzt, dann _darfst_ Du keinerlei Anführungszeichen gebrauchen:

            var begruessung = "Hallo Welt";
            document.write(begruessung);

            Nochmals, diesmal nur mit Variablen: Du weist einer Variable einen String zu:

            var begruessung = "Hallo Welt"; //<- ein String benötigt Anführungszeichen

            Jetzt willst Du einer anderen Variablen mit dem selbern Wert belegen, also die Variable »begruessung« kopieren:

            var zweitebegruessung = begruessung; //<- eine Variable nicht

            Anderes Beispiel:

            var ganzebegruessung = begruessung + ", heute ist Dienstag";

            Nutze alert(), um bei den Zwischenschritte die Ergebnisse anzeigen zu lassen:

            alert(ganzebegruessung); -> ergibt: Hallo Welt, heute ist Dienstag
            oder:
            alert(begruessung + ', heute ist Dienstag'); -> selbe Ausgabe

            encodeURI("'+linka+prod+linkb+keyw+linkc'");

            encodeURI(linka+prod+linkb+keyw+linkc);

            Viele Grüße aus Frankfurt/Main,
            Patrick

            --

            _ - jenseits vom delirium - _
            [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
            Nichts ist unmöglich? Doch!
            Heute schon gegökt?
            1. Patrick, zu großem Dank ist verpflichtet bin! Habe heute sehr viel gelernt. Vielen Dank auch für Deine ausführlichen Erklärung, um mir Verständnis für Javascript zu geben. Du hast Recht darin, dass meine "Kenntnisse" sich momentan noch auf "mangelndes Verständnis" beziehen. ;-)

              1. Tüte Deutsch...
                "ich verpflichtet"...
                "Deine ausführlichen Erklärungen"...
                Sorry...

  2. Hello out there!

    onmouseover="window.status='Öffnet weitere Möglichkeiten'

    Nö; das verschließt dem Nutzer wertvolle Möglichkeiten, nämlich zu erkennen, wohin ein Link führt. Da damit von einem Webseitenautor Schindluder getrieben werden kann, ist die Änderung der Statuszeile mittlerweile in per Voreinstellung in Browsern verboten.

    Lass den Unsinn sein! [</archiv/2006/2/t124467/#m803511>, Diskussion im ganzen Thread]

    See ya up the road,
    Gunnar

    --
    „Und [dieses Forum] soll […] auch ein Fachforum bleiben und kein Psychologieforum werden.“ (Kirsten Evers)
    1. Hello out there!

      onmouseover="window.status='Öffnet weitere Möglichkeiten'

      Nö; das verschließt dem Nutzer wertvolle Möglichkeiten, nämlich zu erkennen, wohin ein Link führt. Da damit von einem Webseitenautor Schindluder getrieben werden kann, ist die Änderung der Statuszeile mittlerweile in per Voreinstellung in Browsern verboten.

      Schön wenns von vorneherein verboten ist und die Leute die es gerne möchten, können dieses "Verbot" ja ausstellen. Für manch (technisch uninteressierten) User ist der Hinweis "Öffnet weitere Möglichkeiten" wahrscheinlich vielsprechender als "http://example.com/index.php?parameter=wirrwar&index=3&dummfug=0&sessid=ASGHASKFJGASASGLG", findest du nicht?

      Lass den Unsinn sein! [</archiv/2006/2/t124467/#m803511>, Diskussion im ganzen Thread]

      Wie auch in der Diskussion vom Threadersteller proklamiert, obliegt es dem Webdesigner, die Möglichkeiten zu nutzen, die ihm der Browser bietet und nicht, darauf zu verzichten, nur weils bestimmte Benutzergruppen nicht wollen (für welche es ja sinnvollerweise die Option gibt, das überschreiben - oder gleich komplett Javascript - zu verbieten). Wenn mir meine Zulassung vom Auto erlaubt, breitere Reifen zu montieren und ich es schöner finde, dann mach ich (Webdesigner) mir auch breitere Reifen drauf, auch wenns der Umwelt wegen des höheren Abriebs und des höheren Verbrauchs schadet (Umwelt = User, dens betrifft).

      See ya up the road,
      Gunnar

      Gruß,
      Jens

      1. Yerf!

        Für manch (technisch uninteressierten) User ist der Hinweis "Öffnet weitere Möglichkeiten" wahrscheinlich vielsprechender als "http://example.com/index.php?parameter=wirrwar&index=3&dummfug=0&sessid=ASGHASKFJGASASGLG", findest du nicht?

        Und für Leute, die die URL sehen wollen kann man ja diese nochmal ins Title-Attribut packen...

        Gruß,

        Harlequin

        --
        <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
        1. Hi,

          Und für Leute, die die URL sehen wollen kann man ja diese nochmal ins Title-Attribut packen...

          Beides wäre ja auch möglich, z.B. in der Form "Eröffnet weitere Möglichkeiten (http://example.com/index.php?parameter=wirrwar&index=3&dummfug=0&sessid=ASGHASKFJGASASGLG)"

          Da dürfte dann ja nichts mehr dagegen sprechen

          Gruß,
          Jens

          1. Yerf!

            Beides wäre ja auch möglich, z.B. in der Form "Eröffnet weitere Möglichkeiten (http://example.com/index.php?parameter=wirrwar&index=3&dummfug=0&sessid=ASGHASKFJGASASGLG)"

            Da dürfte dann ja nichts mehr dagegen sprechen

            Mein Eiwand sollte eher darauf hinweisen, dass es keine Notwendigkeit gibt die Statuszeile zu manipulieren. Das Title-Attribut ist für solche Hinweise nicht nur besser geeignet, es funktioniert dann sogar auch ohne Javascript.

            Gruß,

            Harlequin

            --
            <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
            1. Hi,

              Mein Eiwand sollte eher darauf hinweisen, dass es keine Notwendigkeit gibt die Statuszeile zu manipulieren. Das Title-Attribut ist für solche Hinweise nicht nur besser geeignet, es funktioniert dann sogar auch ohne Javascript.

              Nur warte ich bei einem Tooltip mittels Title-Attribut immer 1 Sekunde bis der aufpoppt (je nach Einstellung im System), dieses "Manko" hab ich bei der Statusleiste nicht.

              Gruß,

              Harlequin

              Gruß,
              Jens

              1. Hello out there!

                Das Title-Attribut ist für solche Hinweise nicht nur besser geeignet [...]

                Nur warte ich bei einem Tooltip mittels Title-Attribut immer 1 Sekunde bis der aufpoppt (je nach Einstellung im System), dieses "Manko" hab ich bei der Statusleiste nicht.

                Mittels 'title'-Attribut erscheint es aber dort, wo der Nutzer auch hinsieht. Wer schaut schon in die Statuszeile, ob der Webseitenautor da irgendwelche Mitteilungen machen will?

                See ya up the road,
                Gunnar

                --
                „Und [dieses Forum] soll […] auch ein Fachforum bleiben und kein Psychologieforum werden.“ (Kirsten Evers)
                1. Hallo Gunnar,

                  Mittels 'title'-Attribut erscheint es aber dort, wo der Nutzer auch hinsieht. Wer schaut schon in die Statuszeile, ob der Webseitenautor da irgendwelche Mitteilungen machen will?

                  Mitteilungen, die in verbreiteten Browsern wie Firefox standardmäßig nicht
                  angezeigt werden :-) Wie es mit dem Standardverhalten anderer Browser aussieht, weiß ich nicht.

                  Freundliche Grüße

                  Vinzenz

                  1. Yerf!

                    Mitteilungen, die in verbreiteten Browsern wie Firefox standardmäßig nicht
                    angezeigt werden :-) Wie es mit dem Standardverhalten anderer Browser aussieht, weiß ich nicht.

                    In meinem Opera wird die Stauszeile nur wärend eines Datentransfers eingeblendet, ansonsten ist sie nicht sichtbar. Ist afaik auch das Standardverhalten.

                    Gruß,

                    Harlequin

                    --
                    <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
      2. Jens, jeder hat seine Meinung. Du hast Recht. Aber für mich war die Status-Zeile nicht wichtig. Deswegen habe ich onmouseover... herausgenommen.

      3. Hallo,

        Für manch (technisch uninteressierten) User ist der Hinweis "Öffnet weitere Möglichkeiten" wahrscheinlich vielsprechender als "http://example.com/index.php?parameter=wirrwar&index=3&dummfug=0&sessid=ASGHASKFJGASASGLG"

        Was ein Argument gegen beknackte und nicht sprechende URLs ist, mehr nicht.

        (»Öffnet weitere Möglichkeiten« ist auch nur ein Beispiel für nichtssagende Information. Das könnte man an jeden Link heften...)

        Mathias

        1. Hallo,

          (»Öffnet weitere Möglichkeiten« ist auch nur ein Beispiel für nichtssagende Information. Das könnte man an jeden Link heften...)

          “Come in and find out”

          Tim

    2. Danke, Gunnar. Hab ich rausgenommen.