BoneT: JavaScript und " und '

Hallo,

ich habe URLs, die aus einer DatenBank kommen.

Dabei sind auch URLs, die mit javascript beginnen, also z.B.:

javascript:window.open('http://www.test.de', 'WinTitle')

nun habe ich eine JavaScript Funktion in meiner PHP Seite, um die URLs aus der Datenbank aufzurufen so eine Art Linkliste.
Die JavaScript Funktion sieht wie folgt aus:

function FollowURL(URL)
{
  document.location.href = URL;
}

Nun das Problem:
Diese JavaScript-Funktion rufe ich über ein <a href>...</a> Tag auf:

$URL = ... // $URL aus DatenBank
...
$PHPReturn = "<a href="JavaScript:FollowURL('".$URL."')">Link1</a>\n";
...

Das Problem entsteht nun dadurch, dass in der URL javascript:window.open('http://www.test.de', 'WinTitle')
wieder Hochkommas vorkommen und mir JavaScript sagt:
) missing.

Also mein Link sieht dann wie folgt aus:

<a href="JavaScript:FollowURL('javascript:window.open('http://www.test.de', 'WinTitle')')>Link1</a>

JavaScript denkt nun, 'javascript:window.open(' sei der Parameter der Funktion FollowURL. Wie kann ich dies nun korrigieren?

Danke für jegliche Hilfe!

  1. Hi,

    JavaScript denkt nun, 'javascript:window.open(' sei der Parameter der Funktion FollowURL. Wie kann ich dies nun korrigieren?

    alle Anfuehrungszeichen und Hochkommas escapen, also z.B. " durch " ersetzen?

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
  2. Hallo BoneT,

    entschuldige bitte das harte wort "das", aber was ist das für ein Mist:

    function FollowURL(URL)
    {
      document.location.href = URL;
    }
    $PHPReturn = "<a href="JavaScript:FollowURL('".$URL."')">Link1</a>\n";

    Du baust die Funktionalität eines Links mit Javascript nach. Dazu gibt es schlichtweg keinen Grund.
    "Javascript:" gehört auch nicht in das href-Attribut, sondern in Attribute wie onclick - dann allerdings ohne das sogenannte Pseudo-Protokoll "Javascript:".

    Das Problem entsteht nun dadurch, dass in der URL javascript:window.open('http://www.test.de', 'WinTitle')

    Du hast also die Schändung mit der Mouse durch Verschatelung auch noch perfektioniert:

    <a href="JavaScript:FollowURL('javascript:window.open('http://www.test.de', 'WinTitle')')>Link1</a>

    eine URI weiset sich mit Protokoll, Domain und Resourcenpfad aus: "http://","eddi.das" und "/"
    So sollte es auch aus der DB kommen.

    $PHPReturn = '<a href="'.$URL.'" onClick="window.open('."'".$URL."'".','."'".'WinTitle'."'".');return(false)">Link1</a>'."\n";

    Gruß aus Berlin!
    eddi

    --
    Wer Rechtschreibfehler findet, darf sie behalten.
    1. Hallo eddi,

      Danke für Deine Antwort,

      aber über Dein onClick=...

      bekomme ich das Problem auch nicht gelöst, weil

      ich die neue URL über eine Funktion aufrufen MUSS!

      also nicht so: onClick="newWindow=window.open('...', '...')"

      sondern;

      onClick="FollowURL('newWindow=window.open('...', '...')')"

      und wie Du siehst, ergibt sich dann das Problem mit den Hochkommata!

      1. Re:

        ich die neue URL über eine Funktion aufrufen MUSS!

        wenn Du mir das plausibel begründest, will ich Dir helfen.

        Gruß aus Berlin!
        eddi

        --
        Wer Rechtschreibfehler findet, darf sie behalten.
        1. Siehe antwort auf wahsaga ;-)

      2. hi,

        aber über Dein onClick=...
        bekomme ich das Problem auch nicht gelöst, weil
        ich die neue URL über eine Funktion aufrufen MUSS!

        Sagt wer?

        onClick="FollowURL('newWindow=window.open('...', '...')')"

        Das wäre ja hochgradiger Unfug - erst öffnest du ein neues Fenster, und dann rufst du mit dem Rückgabewert - einer window-Referenz - deine Funktion FollowURL() auf, die _diese_ dann an document.location.href zuzuweisen versuchen würde.
        (Btw: location ist _immer noch_ ein Unterobjekt von window, nicht von document.)

        Es wäre schön, wenn du dich erst mal ein bisschen mehr mit den Grundlagen von Javascript vertraut machen würdest, damit nicht noch mehr solcher Unfug dabei herauskommt.
        Und anschließend könnte man auch vielleicht(!) geneigt sein, dir Glauben schenken zu wollen, dass irgendetwas so oder so gemacht werden "muss" - vorher muss man das wohl eher reiner Ahnungslosigkeit zuschreiben.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. hallo wahsaga,

          danke für Deine (wieder einmal nicht helfende) Antwort!

          Ich MUSS die URL über eine Funktion aufrufen, weil ich diese aus einer Internet Explorer Bar (siehe www.text-reader.com) aufrufe.

          Dort gibt es eine Funktion IEExplorer.Navigate(...) die dafür sorgt, dass die Seite, zu der verlinkt wird, nicht in der Explorer Bar erscheint, sondern im Haupt-Fenster des Browsers!

          Also das MUSS ist berechtigt!

          Wieso musst Du ständig über das Wissen der Leute hier Urteilen?
          Du vesuchst Dinge die hier gepostet werden in Frage zu stellen bzw. als Unsinn darzustellen!
          Ich bin keineswegs Anfänger in JavaScript, woher nimmst Du Dir das Recht mich als einen zu bezeichnen, wenn Du mich und mein Wissen überhaupt nicht kennst!

          1. Hallo BoneT,

            Dort gibt es eine Funktion IEExplorer.Navigate(...) die dafür sorgt, dass die Seite, zu der verlinkt wird, nicht in der Explorer Bar erscheint, sondern im Haupt-Fenster des Browsers!

            Ausweislich http://www.text-reader.com/ ist damit der Nachweis erbaracht, daß

            - es im gesamten Dokument keine Definition der Funktion IEExplorer.Navigate(...) und
             - es keine separat definierten JavaScripte gibt.

            Somit bleibt Dir Hilfe auch von mir versagt. Sie bliebe Dir auch dann, wenn es eine Funktion IEExplorer.Navigate(...) gäbe, versagt, weil eine einfache Funktion, die irgendetwas im Explorer macht, mir, der ich vor einem Linuxsystem sitze, nicht hilft.

            Und im Übrigen solltest Du auch wahsaga versuchen zu verstehen, der sich wirklich verdammt viel Mühe macht, um hier zu helfen und auch immer wieder selbst ausprobiert, bevor er hier etwas postet.
             Es ist ganz einfach so, daß man, gerade wenn man Leute vor sich hat, die eben keine Anfänger mehr sind und sich damit auch noch brüsten, schlichtweg über solch einen Humbug, der dort veranstaltet wird, frustriert ist; und den man dann auch noch richten soll.

            Gruß aus Berlin!
            eddi

            --
            Wer Rechtschreibfehler findet, darf sie behalten.
            1. Die Funktion ist nicht auf der Haupseite, deren Link ich angegeben habe.

              In der Haupt-Seite geht es generell um die Explorer Bar.

              Die Funktion IEExplorer.Navigate ist beschrieben im Document:

              http://www.text-reader.com/explorerbar/index.html

              ;-)

              1. Re:

                Wenn ich mal wieder lußt auf -Durchgeknallt- habe, laufe ich ja auch rum wie James Blond. Aber Du... - Du schießt echt den Vogel ab!
                Dir wird hiermit Merkbefreitheit in besonders schwerem Maße bescheinigt. Du Supertoller Hecht hast für heute den Spielball des Tages abgegeben, aber nun ist langsam auch wieder gut:

                Zitat aus meinem erstem Posting:

                $PHPReturn = '<a href="'.$URL.'" onClick="window.open('."'".$URL."'".','."'".'WinTitle'."'".');return(false)">Link1</a>'."\n";

                Ups, da war sie schon _Die Lösung_. Man hätte sie nur verstehen müssen. Spaß hats trotzdem gemacht mal wieder einen JavaScript-Guru hochzunehem ;)

                Gruß aus Berlin!
                eddi

                --
                Wer Rechtschreibfehler findet, darf sie behalten.
                1. Hallo,

                  Nein! das ist leider NICHT die Lösung!

                  onClick="window.open... KANN ICH nicht nehmen!!!

                  Ich brauche einen Funktionsaufruf:

                  function FollowLink(MyLink)
                  {
                    IEXplorer.naviagte(MyLink);
                  }

                  deshalb habe ich eine Hochkomma/Komma-Verschachtelung mehr!

                  Mal die anderen Antworten auch lesen!
                  ;-)

                  1. Re:

                    onClick="window.open... KANN ICH nicht nehmen!!!
                    deshalb habe ich eine Hochkomma/Komma-Verschachtelung mehr!

                    du sorry äjiiih!!! window.open() war echt nicht _mein_ Beipsiel äjiiih!!!!

                    Mal die anderen Antworten auch lesen!
                    ;-)

                    Vielleicht wäre jetzt der richtige Zeitpunkt sich damit zu beschäftigen, wie man nur zwei Verschachtelungen benötigt. wahsaga hatte dich schon zum Grundlagenstudium deines Tuns ermuntern, aber der hat sicher auch nicht alles gelesen, was du hier wichtiges gepostet hast.

                    Ich hoffen nur, du bist nicht auch der Programmierer der zum Herunterladen angeboteen Software auf dem Webs, sonst schwant mir Schlimmes!

                    Gruß aus Berlin!
                    eddi

                    --
                    Wer Rechtschreibfehler findet, darf sie behalten.
          2. hi,

            Wieso musst Du ständig über das Wissen der Leute hier Urteilen?

            Ich bilde mir ein Urteil an Hand dessen, was sie mir zeigen.

            Du vesuchst Dinge die hier gepostet werden in Frage zu stellen bzw. als Unsinn darzustellen!

            Du schriebst, dass du

            onClick="FollowURL('newWindow=window.open('...', '...')')"

            aufrufen willst, und deine Funktion FollowURL will den ihr übergebenen Parameter an location.href zuweisen.
            Wenn das _kein_ Unfug sein sollte - was ist es deiner Meinung nach denn dann?

            Ich bin keineswegs Anfänger in JavaScript, woher nimmst Du Dir das Recht mich als einen zu bezeichnen, wenn Du mich und mein Wissen überhaupt nicht kennst!

            Wie gesagt, an Hand dessen, was ich sehe.
            Und obiger blödsinniger Funktionsaufruf, das falsche Ansiedeln von location unterhalb von document, etc. - das macht nun mal nicht den Eindruck, dass da jemand wirklich wüsste, was er tut.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. Hallo,

              »» onClick="FollowURL('newWindow=window.open('...', '...')')"

              aufrufen willst, und deine Funktion FollowURL will den ihr >übergebenen Parameter an location.href zuweisen.
              Wenn das _kein_ Unfug sein sollte - was ist es deiner Meinung nach >denn dann?

              Ich will den Parameter garnicht an location.href zuweisen, sondern dem document.location.href des Browsers und nicht der Explorer Bar!
              (Wie gesagt, der Link wird in einer Explorer Bar angeklickt, die verlinkte Seite soll aber dann im Browser und nicht in der ExplorerBar erscheinen)

              bilde mir ein Urteil

              es steht dir (und auch keinem anderen) ein Urteil zu, und schon garnicht aufgrund eines Postings was keinerlei Information über mich enthält!

              Also einfach mal sachlich bleiben! Selbst wenn hier Leute mal Fragen stellen die aus Deiner sicht Unsinn sind, einfach mal den Sinn voraussetzen und nicht den Unsinn!

              ;-)

              1. hi,

                Ich will den Parameter garnicht an location.href zuweisen, sondern dem document.location.href des Browsers und nicht der Explorer Bar!

                Und woher sollte "der Browser" ein Objekt document.location mit Eigenschaft href haben?

                es steht dir (und auch keinem anderen) ein Urteil zu,

                Was mir _deiner_ Meinung nach zusteht, ist mir vollkommen Wurscht.

                und schon garnicht aufgrund eines Postings was keinerlei Information über mich enthält!

                Es enthält schon ziemlich viel Informationen darüber, wie du mit Javascript umgehst.
                Und auf dieser Basis erlaube ich mir, deinen Wissensstand bzgl. Javascript einzuschätzen.

                Also einfach mal sachlich bleiben!

                Dito.

                Selbst wenn hier Leute mal Fragen stellen die aus Deiner sicht Unsinn sind, einfach mal den Sinn voraussetzen und nicht den Unsinn!

                Oder vielleicht einfach mal akzeptieren und verstehen, wenn dir jemand erklärt, warum das was du für sinnig hältst unsinnig ist.

                gruß,
                wahsaga

                --
                /voodoo.css:
                #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo Linksetzer,

      also das Hilft nun wirklich nicht, wenn es so wäre, hätte ich hier nicht gepostet!
      Das Problem liegt daran, dass es nur zwei Varianten gibt einen String einzuschließen " und '.
      Aber ich bräuchte ne dritte, weil:
      Nehmen wir an ich habe folgenden Ausschnitt aus der PHP Seite:

      ...
      var $MyLink = "javascript:window.open('http://www.abc.de', 'ABC')";
      $PHPReturn .= "<script type="text/javascript">";
      $PHPReturn .= "  function FollowLink(Link);\n";
      $PHPReturn .= "  {\n";
      $PHPReturn .= "    IEExplorer.navigate(Link);\n";
      $PHPReturn .= "    return false;\n";
      $PHPReturn .= "  }\n";
      $PHPReturn .= "</script>\n";
      $PHPReturn .= "<a href="#" onClick="return FollowLink('".$MyLink."')"\n";
      ...

      wobei der Einfachheit halber $MyLink hier auf einen festen Wert gesetzt wurde, der aber aus ner Datenbank kommt und genauso "http://de.selfhtml.org" heißen könnte.

      Das Problem ensteht alsom wenn man einen MyLink hat, der keine URL zu einer Webseite enthält sondern z.B. den gezeigten JavaScript Code.

      Dann wird die Funktion umgesetzt zu:

      ...onClick="return FollowLink('javascript:window.open('http://www.abc.de', 'ABC')')"...

      woraufhin der JS interpreter denkt nach window.open( wäre der Parameter der Funktion zu ende, weil ja wieder ein ' kommt:

      ...onClick="return FollowLink('javascript:window.open('

      und nach dem open(' erwartet JS natürlich eine )

      Hat jemand ne Idee?

      Danke!

      PS: Und bitte nicht wieder Lösungen anbieten, wo die Funktion IEExplorer.navigate() weggelassen wird etwa so:

      ...onClick="".$MyLink""...

      Das geht eben nicht weil, siehe vorherige Posts!

      Danke!

      1. hi,

        also das Hilft nun wirklich nicht, wenn es so wäre, hätte ich hier nicht gepostet!

        Der Linksetzer hätte das sicher nicht gepostet, wenn es nicht die Lösung für dein Problem wäre.

        Das Problem liegt daran, dass es nur zwei Varianten gibt einen String einzuschließen " und '.
        Aber ich bräuchte ne dritte

        Gibt es aber nicht.

        woraufhin der JS interpreter denkt nach window.open( wäre der Parameter der Funktion zu ende, weil ja wieder ein ' kommt

        Um so etwas zu vermeiden, gibt es ja die Möglichkeit des Maskierens von solchen Sonderzeichen wie " oder '.

        Hat jemand ne Idee?

        Ja - probier's mal mit _verstehen_ dessen, worüber hier geredet wird.

        Auf Maskierung/Escapen wurdest du jetzt hier mehrmals hingewiesen - also wieso bekommst du das, selbsterklärter Javascript-ausreichend-Kenner der du ja sein willst, nicht hin?

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Hallo wahsaga.

          Auf Maskierung/Escapen wurdest du jetzt hier mehrmals hingewiesen - also wieso bekommst du das, selbsterklärter Javascript-ausreichend-Kenner der du ja sein willst, nicht hin?

          Zumal er es ja offensichtlich bereits nutzt:

          $PHPReturn .= " {\n";

          Einen schönen Mittwoch noch.

          Gruß, Ashura

          --
          sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
          mathbr:del.icio.us/ mathbr:w00t/