pierre: top.frames.length mit PHP feststellen

Hallo zusammen,

habe folgendes problem:

abhängig davon, ob eine Seite in einem Frameset geladen wird oder nicht, möchte ich das eine oder andere Menü in die Seite einbinden. Das ist mit JavaScript kein Problem, erzwingt aber einen Code ohne Umbrüche und Leerzeichen. Da der Menü-Code aber gelegentlich bearbeitet werden soll, möchte ich ihn mittels include (PHP) ind die Seite einfügen. Da PHP kein frames-Objekt kennt, bin ich auf folgendes gekommen:

<script language="JavaScript">
   <!--
   if(top.frames.length > 0)
   {document.write("<?php include("menu_a.inc.php");?>");
 }

else{
    document.write("<?php include("menu_b.inc.php");?>");
}

//-->
  </script>

Das funktioniert logischerweise nicht, da der Server die Seite vor dem Browser verarbeitet.

Vielleicht hat jemand eine Idee oder einen ganz anderen Lösungsansatz?
Dank im Voraus!

pierre

  1. Hi,

    if(top.frames.length > 0)
       {document.write("<?php include("menu_a.inc.php");?>");

    prinzipiell funktioniert das schon; nur kommt beim Client (der ja das JavaScript ausführt) dann der Inhalt der Datei menu_a.inc.php an. Je nachdem, wie dieser aussieht, kollidiert das mit der Syntax von document.write().

    Vielleicht hat jemand eine Idee oder einen ganz anderen Lösungsansatz?

    <script language="JavaScript1.1" type="text/javascript" src="menu_a_und_b_in_javascript_syntax.inc.php">
    <!--
    document.write('Hoppala, ein Fehlerchen!');
    // -->
    </script>

    Der Content-Type für JavaScript-Ressourcen lautet application/x-javascript.

    Cheatah

    1. Hallo Cheatah,

      if(top.frames.length > 0)
         {document.write("<?php include("menu_a.inc.php");?>");

      prinzipiell funktioniert das schon; nur kommt beim Client (der ja das JavaScript ausführt) dann der Inhalt der Datei menu_a.inc.php an. Je nachdem, wie dieser aussieht, kollidiert das mit der Syntax von document.write().

      Genau das ist der Fall. Da es aber um recht viele und lange Inhalte der jeweiligen menu_XY_.inc.php geht, möchte ich es gerne vermeiden, alle in JavaScript-Syntax schreiben zu müssen. Prinzipiell geht es ja auch ganz ohnen PHP mit:

      if(top.frames.length > 0)
      {document.write("inhalt_in_JS-Syntax");

      Mir ist noch ein anderer Ansatz eingefallen. Da es nur ein Frameset gibt, das die Seiten aufruft, könnte die Bedingung zum laden des einen oder andern Menüs auch der Referrer anstatt "top.frames.length" sein, oder? Weiß jemand, ob man in PHP solch eine Bedingung formulieren kann?

      Danke schonmal!

      pierre

      1. Hi,

        Da es nur ein Frameset gibt, das die Seiten aufruft, könnte die Bedingung zum laden des einen oder andern Menüs auch der Referrer anstatt "top.frames.length" sein, oder?

        der Referer ist nicht verläßlich. Manche Browser liefern top.location.href, manche (zumindest in JavaScript; in HTTP habe ich es nie getestet) top.document.referrer. Andere wiederum liefern gar nichts, etwas völlig anderes, oder...

        ...oder irgendein Proxy dazwischen filtert die Daten raus. Für wichtige Funktionen solltest Du _niemals_ den Referer zu Rate ziehen.

        Weiß jemand, ob man in PHP solch eine Bedingung formulieren kann?

        Es _ginge_ schon; der Wert steht in getenv('HTTP_REFERER'). Damit landest Du aber früher oder später auf der Nase.

        Cheatah