Archivlink: javarea.de Forum > JavaScript > Aus einer Seite eines Framesets auf externe *.js zugreifen, ...
Vollständigen Link anzeigen: javarea.de Forum > JavaScript > Aus einer Seite eines Framesets auf externe *.js zugreifen, ...
Pages: [1]
| geschrieben von Cluster am 08.06.2005 - 12:39 |
... wenn *.js in der index.php mit dem Frameset integriert ist.
Ist so etwas möglich und wenn ja, wie muss der Link dann dahin aussehen. Gedacht habe ich an einen onclick-Link.
Vielleicht kann mir ja jemand helfen.
|
| geschrieben von Micha am 08.06.2005 - 12:43 |
Was hast Du Dir genau vorgestellt?
Wenn die js im ParentFrame liegt, also im Elternfenster, dann haben afaik alle Seiten, die in dieses Frameset geladen werden zugriff auf die in dem JS implementierten Funktionen...
Micha |
| geschrieben von Cluster am 08.06.2005 - 12:49 |
Bist Du Dir da sicher?
Ich habe nämlich eine kleine printIt()-Funktion, welche den Browser checkt, Auflösung usw. usf. Diese *.js ist im <head> der index.php integriert.
Rufe ich nun aus einer Seite in dem Frameset mittels
| PHP-Quelltext | 1:
2:
3:
|
<?
<a href="javascript:onclick=printIt()">Seite drucken</a>
?>
|
die Funktion auf, passiert gar nichts.
Füge ich allerdings die *.js in die entsprechende Seite ein, in welcher sich auch der Link befindet, klappt alles einwandfrei. |
| geschrieben von Micha am 08.06.2005 - 12:56 |
ich meine es müsste gehen. ich denke du hast vergessen das fenster (frame) mit anzugeben. *spekulativ*
Micha |
| geschrieben von Cluster am 08.06.2005 - 13:02 |
Hääähhh ... ich weiß leider nicht, was Du damit meinst ?!?
Meinen Link habe ich wie oben bereits genannt gesetzt. Muss ich da irgendwie noch was mit 'nem Frame nennen/ergänzen? |
| geschrieben von Micha am 08.06.2005 - 13:08 |
Okay, ein einfaches Bsp:
Die Frameseite mit Script:
| HTML-Quelltext | 1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
| <html>
<head>
<title>MainFrame</title>
<script type="text/javascript">
function doIt(text){
window.Hauptframe.document.write(text);
}
</script>
</head>
<frameset cols="150,*">
<frame name="Inhalt" target="Hauptframe" src="left.html">
<frame name="Hauptframe" src="right.html">
</frameset>
</html> |
die linke Seite, die das Script nachher nutzen soll:
| HTML-Quelltext | 1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
| <html>
<head>
<title>Left</title>
</head>
<body>
</body>
<a href="#" onclick="parent.doIt('Hallo');">Klick mich</a>
</html> |
das rechte Frame ist eine normale HTML Datei
| HTML-Quelltext | 1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
| <html>
<head>
<title>right</title>
</head>
<body>
</body>
</html> |
Besser? |
| geschrieben von Cluster am 08.06.2005 - 13:14 |
So viel arbeitet hättest Du Dir gar nicht machen brauchen, aber trotzdem vielen Dank.
Habe nun meinen Code so ergänzt:
| PHP-Quelltext | 1:
2:
3:
|
<?
<a href="javascript:onclick=parent.printIt()">Seite drucken</a>
?>
|
Und man soll es ja nicht glauben, jetzt funzt es auf einmal.
Vielen Dank derletztekick . |
| geschrieben von Micha am 08.06.2005 - 13:21 |
| Zitat | | | Original geschrieben von Cluster am 08.06.2005 - 13:14
So viel arbeitet hättest Du Dir gar nicht machen brauchen, aber trotzdem vielen Dank.
|
Das war genau das, was ich vorher versucht habe in Worte zufassen....
| Zitat | | | Original geschrieben von Cluster am 08.06.2005 - 13:14
Und man soll es ja nicht glauben, jetzt funzt es auf einmal.
|
Ich bin auch immer wieder überrascht, was alles so geht. Viel mehr macht mir aber Sorgen, wenn ich sehe, was alles nciht so geht )
Wenns Dich genauer interessieren sollte, dann ist SelfHTML ../frames.htm Deine (erste) Anlaufstelle.
Schöne Grüße und viel Spass Micha
P.S. Nur informativ, warum Frames, wenn Du PHP zur Verfügung hast?
|
| geschrieben von Cluster am 08.06.2005 - 15:48 |
@derletztekick:
| Zitat | | | Original geschrieben von derletztekick am 08.06.2005 - 13:21
P.S. Nur informativ, warum Frames, wenn Du PHP zur Verfügung hast?
|
Ich bin in php die absolute Niete, nutze nur fertige Scripte, welche ich ein wenig anpassen muss. Die Seiten habe ich alle in *.php ausgelegt, da ich halt die Scripte per include einfüge und somit nicht über die .htaccess html-Seiten nach php parsen muss.
Hast Du vielleicht einen Vorschlag, wie man das ohne Frames lösen kann? Wäre Dir für eine Antwort und Deine Hilfe dankbar - man(n) lernt ja nun mal nie aus, oder? |
| geschrieben von Micha am 08.06.2005 - 16:41 |
Sicher^^
Du machst es so wie ich auf meiner Seite nur vll etwas semantischer und somit sparsammer mit den DIV's 
Somit benötigst Du genau eine INDEX, in der das Design Deiner Seite festgelegt wird. Alle Unterseiten bestehen ja in der Regel aus Text. Diesen schreibst in eine einfache Datei (ohne <html><head> usw.)
via include(<dateiname.php>); setzt Du dann diesen Inhalt genau dort hin (z.B. in ein DIV), wo er hin soll
| HTML-Quelltext | 1:
2:
3:
| <div id="content">
include(<dateiname.php>);
</div> |
So ist das "Grundprinzip"
Micha |
| geschrieben von Cluster am 08.06.2005 - 19:22 |
Danke für den Tip, hört sich ja eigentlich sehr einfach an.
Braucht man eigentlich auch gar kein direktes php zu coden, oder? Wie würden denn die Links aussehen, wenn jetzt z.B. eine andere Seite in dem Div geladen werden soll?
*******************************************
Ich glaub' das ich es verstanden habe:
jede Seite wird einzeln für sich mit den divs gebaut und in jeder auch das Menue und so weiter integriert. Beim Aufrufen einer anderen Seite, wird eine neue Seite geladen und bloss der Inhalt des content-divs wird geändert, korrekt?
Demzufolge hat also jede Seite den gleichen Aufbau und es ändert sich einzig und allein der include-Bereich des content-divs - korrekt? |
| geschrieben von Micha am 08.06.2005 - 19:50 |
einen Parameter hängst Du immer an Deine index.php ran. das sieht allgemein immer so aus:
| HTML-Quelltext | 1:
| dateiname.php?varname=wert |
oder als Bsp:
| HTML-Quelltext | 1:
| index.php?page=Impressum |
Im letzten Beispiel würde sich als das Impressum öffnen, was unter reinem html sicher impressum.html heißen würde.
wie fangen wir nun an. Zunächst mal der Inahlt der impressum.php (kann auch anders heißen) und eine Startseite....
| HTML-Quelltext | 1:
2:
3:
| <h1>Startseite</h1>
<h2>Willkommen</h2>
<p>ein paar Zeilen Text, sei kreativ </p> |
| HTML-Quelltext | 1:
2:
3:
4:
5:
6:
7:
8:
| <h1>Impressum</h1>
<h2>Autor</h2>
<p>Hans Mustermann<br />
Musterstraße 8a<br />
012345 Musterdorf</p>
<h2>Ueberschrift</h2>
<p>weitere Daten und Text</p> |
Das Prinzip ist denke ich mal klar. Du schreibst dort alles rein, was sonst zwischen <body> und </body> stehen würde
Deine index.php könnte so aussehen:
| HTML-Quelltext | 1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
| <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<title>Meine Seite</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<!-- weitere Angaben //-->
</head>
<body>
<div id="menu">
<ul>
<li><a href="index.php?page=Startseite</a></li>
<li><a href="index.php?page=Impressum</a></li>
</ul>
</div>
<div id="content">
<!-- hier soll nun der jeweilige Inhalt rein //-->
</div>
</body>
</html> |
So damit er nun auch die gewünschte Seite in unser DIV (Content) läd, muss PHP die Variabel page auslesen. Nun gibt es viele Ansätze wie man das umsetzt. Ich nehme mal den einfachsten Fall über eine swich-Abfrage.
Die Variabel, die mit der URl übergeben wird, ist ja page, diese gilt es auszulesen.
Das machst Du ganz einfach:
| HTML-Quelltext | 1:
| $seite = $_GET['page']; // mit GET bekommst du alle Parameter, die an der URI hängen |
Der Inhalt der Variabeln page, die mit der URI übergeben wurde, ist nun in unserer Variablem $seite gespeichert. Nun machen wir unsere Abfrage, die wir im div Content einfügen:
| HTML-Quelltext | 1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
| <div id="content">
<?php
$seite = $_GET['page'];
switch ($seite) {
case 'Startseite':
include ("startseite.php");
break;
case 'Impressum':
include ("impressum.php");
break;
// Das machst Du nun für alle Seiten analog...
default:
include ("startseite.php"); // Diese Seite wird geladen, wenn kein Parameter oder ein FALSCHER Parameter mit der URI übergeben wurde - immer angeben!!!
break;
}
?>
</div> |
Okay?
Micha |
| geschrieben von Cluster am 08.06.2005 - 20:43 |
Also wird nicht jede Seite neu mit Banner, Navi, Content usw. mit einem Link aufgerufen, sondern es wird immer nur der Inhalt des Content-Divs ausgetauscht - richtig verstanden?
Der Link öffnet dann in dem Div eine Seite, welche keinen <html>, <head> und <body> hat, sondern nur den Inhalt des Bereiches zwischen <body> und </body> enthält - korrekt?
Jede einzelne Seite meiner Internetpräsenz führe ich dann in dem content-Div wie oben von Dir angeführt auf.
Die ganzen divs usw. packe ich in die index.php und brauche dann logischerweise auch kein Frameset mehr, weil diese Geschichte dann durch die Divs übernommen wird und ja auch gewünscht und gewollt war.
Ist die hier jetzt aufgezeigte Lösung eigentlich crossbrowserfähig?
Vielen, vielen Dank für Deine Lehrstunden, ich werde versuchen es umzusetzen. Ist es für Dich ein Problem, wenn ich mich bei Dir mal melde, wenn ich eine Rückfrage habe? Wenn Du vielleicht auch ICQ nutzt, kannst Du mir ja mal gerne Deine Nummer mit einer PN schicken. |
| geschrieben von Micha am 08.06.2005 - 21:03 |
| Zitat | | | Original geschrieben von Cluster am 08.06.2005 - 20:43
Also wird nicht jede Seite neu mit Banner, Navi, Content usw. mit einem Link aufgerufen, sondern es wird immer nur der Inhalt des Content-Divs ausgetauscht - richtig verstanden?
|
Ja, es ist fast so wie bei frames, da tauscht du die Navi usw. ja auch nciht aus. Der Bereich, in dem Du Deinen Inhalt lädst muss auch kein DIV sein, aber das st wohl in zwischen der Standard-TAG für alles^^
| Zitat | | | Original geschrieben von Cluster am 08.06.2005 - 20:43
Der Link öffnet dann in dem Div eine Seite, welche keinen <html>, <head> und <body> hat, sondern nur den Inhalt des Bereiches zwischen <body> und </body> enthält - korrekt?
|
Ja, die einzelnen Unterseiten bekommen die Navi und den Banner usw, von der index.php geliehen oder wie auch immer man das nennen darf.
| Zitat | | | Original geschrieben von Cluster am 08.06.2005 - 20:43
Die ganzen divs usw. packe ich in die index.php und brauche dann logischerweise auch kein Frameset mehr, weil diese Geschichte dann durch die Divs übernommen wird und ja auch gewünscht und gewollt war.
|
Ja, Du machst _ein_DIV, wo immer der Inhalt reinkommen soll, das include nimmt Dir dann den Rest ab. also nicht pro unterseite ein Div machen...
| Zitat | | | Original geschrieben von Cluster am 08.06.2005 - 20:43
Ist die hier jetzt aufgezeigte Lösung eigentlich crossbrowserfähig?
|
Du setzt an der falschen Stelle an. Deinen PHP Code, den Du schreibst, sieht man nachher nicht mehr. Der Server, auf dem Deine Seite liegt, parsed den Code und führt ihn aus. Er macht also nix anderes, als Dein PC, wenn Du ein *.exe aufrufst. Das Resultat dieser Ausführung und nur das, liefert er an Deinen Browser zurück. Unter Windows wird Dir das Resultat auch angezeigt, wenn die *.exe ausgeführt wird, das Program öffnet sich (Code siehst Du keinen^^)
Fazit: Solange Dein HTML valid ist, also dem Standard entspricht, kommt jeder Brwoser damit klar. Es liegt also nie an PHP, das eine Seite nicht korrekt angezeigt wird, sondern an dem HTML-Code, der erzeugt wird von _Dir_.
| Zitat | | | Original geschrieben von Cluster am 08.06.2005 - 20:43
Wenn Du vielleicht auch ICQ nutzt, kannst Du mir ja mal gerne Deine Nummer mit einer PN schicken.
|
Hast eine PN...
|
|