Supportnet Computer
Planet of Tech

Supportnet / Forum / Webseiten/HTML

Deep-Link auf Seite von Homepage mit Frames ?





Frage

Hallöchen, ich habe ein Problem, denn jedes Mal wenn jemand einen (hoffentlich) sogenannten Deep-Link auf meine Seite absetzt (also auf eine Unterseite und nicht die Startseite), dann zeigt er, da ich mit Frames arbeite eben nur die eine HTML-Datei an und (verständlicherweise) weder den Navi-Frame, noch den Kopf-Frame. Gibt es irgendeine Möglichkeit, ein Script vielleicht, das trotz des Zugriffs auf nur diese eine Seite, die anderen beiden Frames mitgeladen werden ? Ach ja, ich werde wohl innerhalb dieses Jahres auf PHP umsteigen und die Frames zu Teufel jagen. Spätestens dann sollte es sowieso kein Problem mehr sein, aber bis dahin wäre eine (recht einfache ?) Übergangslösung echt Klasse. Tschö Datei

Antwort 1 von Dr.Ma-Busen

Nabend!

Wenn du .htaccess nutzen kannst bzw. zur Verfügung hast, dann könntest du das über htaccess lösen.
Das ganze geht ähnlich wie hier beschrieben (Punkt4 Bilder schützen)

MfG
Dr. Ma-Busen

Antwort 2 von Helferlein

javascript:

if (parent.frames.length > 0) {

parent.location.href = self.document.location

}

Antwort 3 von rfb

auf http://www.friedels-home.com/frameklau/frameset.htm wird eine JavaScript-Lösung für das Problem beschrieben. Wenn du diesem Deeplink folgst passiert übrigens genau das, was du dir für deine HP wünschst.

Antwort 4 von Datei

Oih, vielen Dank schon mal :) .


@Dr. Ma-Busen
Mit .htaccess müsste ich eigentlich arbeiten können. Leider verstehe ich nicht genau, wie ich das dann umschreiben müsste, damit das nicht bei gelinkten Bildern auf eine Fehlerseite umleitet, sondern womöglich gar auf der Seite bleibt und die nur in das Frameset einbindet. Wie bei dem folgenden Java-Script halt.

@Helferlein und rfb

Haben nicht unheimlich viele Leute javascript deaktiviert ? Hör ich jedenfalls immer. Bei denen würde dann wohl einfach gar nichts passieren, oder ?

Ich hab aber noch nicht ganz verstanden, was ich dann bei
parent.location.href =
angeben soll.
Kommt da "http://index.htm" hin, oder "http://www.startseite.de/index.htm" oder gar "http://www.startseite.de" ?
Das letzte ist wohl das, worauf in der großen roten Schrift hingewiesen wird, aber sicher bin ich da nicht. Und bevor ich "strafrechtliche Konsequenzen" in Kauf nehme, weil ich rumprobiere...;) .

Aaarghl. Jetzt habe ich bei der Siete mal in den Quelltext geguckt, weil ich dachte, dass mir das vielleicht hilft. Aber da sieht das script gleich schon wieder ganz anders aus. Jetzt bin ich völlig raus...



Tschö
Datei



Antwort 5 von helferlein

es kommt genau so wie ich es hingekritzelt hab rein. schau auf www.abirechner.de da steht das genau so...

zum thema javascript: ja es gibt einige leute die js deaktiviert haben...aber gegenfrage: gibt es nicht unheimlich viele webdesigner, die auf frames verzichten?

hier zu ein interessanter link:

http://www.kommdesign.de/fakten/seite2.htm#Frames

Antwort 6 von Datei

@helferlein

Das mit den Frames ist schon klar, da hast Du mich ;). Aber ich habe ja schon in der Eingansgfrage geschrieben, das ich demnächst (gegen Ende des jahres vielleicht ?) auf Frames verzichten werde.

Also nochmal für ganz Dumme (und mich), ich muß das Script von Dir nur so nehmen und NICHTS daran ändern ? Also nirgendwo einen Hinweis auf meine Seite oder die Adresse des Frames einbauen ? (Merkt man eigentlich, dass ich mich noch gar nicht mit javascripten beschäftigt habe ? Kaum, oder :)?)

Tschö
Datei

Antwort 7 von Helferlein

ich hab auch keinen plan von js, habe das script einfach nur so bekommen von einem freund.

ja, einfach einfügen in den javascript bereich deiner seiten.

Antwort 8 von Datei

Okay, ich habe jetz mal verschiedene aber ziemlich ähnliche Javascripte ausprobiert, unter anderem auch die vom Helferlein und die von friedels Homepage. Allen ist aber gemein, dass ich damit auf der Startseite lande. gibt es keine Möglichkeit, auf der Seite zu bleiben, auf die gelinkt wurde und eben nur den linken und oberen Frame nachzuladen ? Oder hab ich was falsch gemacht ?

Also das Script, das ich jetzt in eine Datei namens zitadelle.html eingebunden habe lautet

<script language='JavaScript'>
<!--
if (parent.location.href == location.href) {
parent.location.href = "http://www.das-phantom.net/index.htm";
}
//-->
</script>

Die index.htm ist die Datei, wo die Framedefinition hinterlegt ist. Nur nimmt er dann halt verständlicherweise auch die home.htm mit, die meine Startseite ist und lässt nicht die zitadelle.html im Frame.


Nicht das das jetzt jemand falsch versteht. Das ist schon ein Fortschritt, mit dem ich mich zufrieden geben würde, aber falls es noch einfach besser gehen würde, wärs natürlich Klasse *g*


Tschö
Datei

Antwort 9 von Helferlein

also langsam...

KOPIEREN und EINFÜGEN:

<script language='JavaScript'>
<!--
if (parent.frames.length > 0) {
parent.location.href = self.document.location
}
//-->
</script>

DANKE

Antwort 10 von Datei

Ok, Sorry Helferlein.

Ich hatte vergessen zu erwähnen, dass ich auch Dein Script eingebaut habe. Allerdings tut sich da gar nichts, wenn ich das im <Head>-Bereich reinkopiere.
Oder soll das nicht in den <Head> ?

Falls Du es sehen möchtes, ich habe es in der Datei www.das-phantom.net/bericht.html eingebaut, aber es werden keine Frames geladen...



Trotzdem weiterhin vielen Dank für die fortgesetzte Hilfe :) .


Tschö
Datei

Antwort 11 von Helferlein

ach in bin ein Z weiß ich wieder wozu das gut war...wenn die seite als frame geladen wird, läd sie sich automatisch neu aber als einzelne seite...sorry, verwechselt!

versuch die angegeben seite mal mit frame zu öffnen...

Antwort 12 von ukrainax

Zitat Helferlein:
ja, einfach einfügen in den javascript bereich deiner seiten

@Helferlein:
Wo liegt denn der "Javascript Bereich" einer Seite?? *kopfkratz* ;)

Antwort 13 von Datei

@Helferlein

Oh, äh, das ist ja so ungefähr genua das Gegenteil von dem was ich will. *schnell wieder ausbauen geh*

Trotzdem Danke :), vielleicht brauch ich sowas ja auch mal.



Tschö
Datei

Antwort 14 von Marker

Hi Datei,

das dürfte es sein:

Du änderst Deine Frameseite wie folgt:
<html>
<head>
<title>Frames nachladen</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<script language="javascript">
function laden()
{
if (location.search)
{
//Die Frameseite wurde von einer untergeordneten Seite mit "index?dateiname.htm" aufgerufen
params=unescape(location.search.substring(1,location.search.length));
//params enthält jetzt die komplette Url der aufrufenden Seite
//Jetzt prüfst du ob die Seite wirklich von Dir ist
//sonst könnte jemand einfach Deinen Frameset mit Seinen Seiten aufrufen
//z.B Z willst Du sicher nicht, also prüfst du vorher, ob die angehängte URL
//aus Deiner Domäne stammt
if(params.indexOf("deineDomäne.de")!=-1) //domäne ist ok
self.inhalt.location.href=params //seite in den Frame "inhalt" laden
}
}
</script>
</head>
<!--Im onload des Framesets die Datei ggf. nachladen--//-->
<frameset rows="64,*" onload="laden()">
<frame name="oben" scrolling="no" noresize src="kopf.htm" >
<frameset cols="150,*">
<frame name="navi" target="Hauptframe" src="navi.htm" scrolling="auto">
<frame name="inhalt" scrolling="auto" src="home.htm" >
</frameset>
<noframes>
<body>
<p>Diese Seite verwendet Frames. Frames werden von Ihrem Browser aber nicht unterstützt.</p>
</body>
</noframes>
</frameset>
</html>


In deine einzelnen Seiten bindest Du jetzt folgendes Script ein:

<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<script language = "javascript">
//Diese funktion in alle Seiten einbinden
//Zuerst prüfst Du ob die seite in einem Frameset und wenn ja in deinem frameset liegt.
//dazu prüfst du ob das frameset einen von dir vergebenen Framenamen enthält
if (top==self||!top.frames['meininhalt'])
//wichtig: gib einen frame einen ausgefallenen Namen anhand dessen du ihn identifizierst
//Ist Deine Frameseite nicht vorhanden wird sie geladen
top.location.href="http://www.deineDomaene.de/index.htm?"+self.location.href;
</script>
</head>
<body>
Beispiel
</body>
</html>

Quelle

Marker

Antwort 15 von @ukrainax

http://selfhtml.teamone.de/javascript/intro.htm#javascriptbereiche


--------------------------------------
lesen bildet, denken hilft

Antwort 16 von Datei

@Marker

Oih, vielen Dank. Das sieht echt vielversprechend aus. Ich hoffe, ich werde das auch verstehen *g*.

Besser ich fang dann mal an zu basteln. Morgen.

Tschö
Datei

Antwort 17 von ukrainax

von hier <script type="text/javascript"> bis hier </script> geht ein javascript-bereich. den kannst du überall auf der seite einbauen, je nach funktion zwischen <head> und </head> oder in den body. es gibt auf einer seite keine "festen javascript-bereiche" und in obigem posting kam das so rüber.

hier fragen nicht nur profis an, sondern auch solche, die es werden wollen ;) wo liegt das problem, das javascript komplett (mit bereich) zu posten und anzugeben, ob es in den head- oder body-tag gehört?

lesen bildet - denken hilft... das ist richtig, aber man denkt sich leichter, wenn etwas verständlich geschrieben wird und nicht solche pseudo-angaben, wo sich ein laie erst mal reingooglen muss ;)

Zitat: Helferlein: ich hab auch keinen plan von js, habe das script einfach nur so bekommen von einem freund <--- da sollte man dann bei javascript den support einfach lassen oder eine url posten, man kann (auch) aus unkenntnis heraus einiges zum absturz bringen

Antwort 18 von Datei

Zitat:

[I]"man kann (auch) aus unkenntnis heraus einiges zum absturz bringen"

Ja ja, und genau das habe ich dann auch versucht :) .

Aaaalso, das Script (oder die Scripte) von Marker macht auf jeden Fall schon mal was anderes, als die vorherigen. Allerdings ist da auch das Problem dass ich (als ziemlicher Laie) nicht ganz genau weiß, wie ich das Script auf meine Seite umsetzen soll, damit das auch funktioniert.
Erst hat es nämlich nur dasselbe getan, wie die anderen Scripte und dann nach ein wenig Umbau hat es die Seite im Zehntelsekundentakt immer wieder neu geladen. Auch nicht schlecht und bringt wohl die "zitadelle.html" Dank meiner langsamen Reaktionen ziemlich weit hoch in meiner Zugriffsstatitik, aber eben nicht genau das, was ich gerne wollte.

Daher jetzt meine unverschämte Frage. Würde sich jemand bereit erklären, mich entweder Stück für Stück da rein zu führen und mir genau zu sagen, wo was hin soll und was ich durch was ersetzen muß ? Die Kommentare sind zwar schon nicht schlecht, aber so ganz blicke ich da nicht durch.

Bitte ?


Tschö
Datei

Antwort 19 von Dr.Ma-Busen

Nabend!

Also mit .htaccess machst du es so. Du erstellst eine Datei mit den Namen ".htaccess" ( aber ohne ") in dom Ordner in den sich auch alle HTML- Dateien auf dein Webspace befinden. In diese htaccess kommt folgendes rein
 RewriteEngine on
Options +FollowSymLinks
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?deineDomain.de/.*$ [NC]
RewriteRule ^(.+)$ http://www.deineDomain/index.html?$1 [R,L] 


Wenn jetzt jemand von einer andere Seite auf deine Seite kommt, dann wird er durch die Regeln RewriteCond und RewriteRul zu der von dir definierten Seite weitergeleitet. Also z.B. wollte jemand auf www.deineDomain.de/verzeichnis/datei.html. Jetzt wird er aber nach www.deineDomain.de/index.html weitergeleitet.
Am ende der URL in der Regel RewriteRul befindet sich noch ?$1, dies sorgt dafür das an die URL zu der weitergeleitet wird noch der Name der Datei angehängt wird die der Besucher erreichen wollte. Also in diesem Beispiel www.deineDomain.de/index.html?verzeichnis/datei.html
Das ganze bietet dir jetzt die Möglichkeit in der HTML- Datei zu der geleitet wurde mit JavaScript die URL auszulesen, und anschließend die Seite in das Hauptframe zu laden auf die der Besucher eigentlich wollte.

Das ganze geht aber nur unter bestimmten Bedingungen. Und zwar muss die htaccess zusammen mit den HTML- Dateien in einem Verzeichnis befinden und die HTML- Datei zu der weitergeleitet werden soll muss sich ein Verzeichnis höher befinden. Weil sich sonst der Browser in einer Endlosschleife befindet.


Das ganze was du vorhast habe ich auf meiner HP auch gemacht, aber leider nur mit JavaScript, weil zu den Zeitpunkt als ich das gemacht habe noch nicht wusste das man das mit .htaccess auch machen kann.
Hier ist noch das JavaScript das die Datei aus der URL des Eltern- Fenster ausliest und anschließend in das Frame ladet. Falls du das auch vorhast, anschließend die Zieldatei noch ins Hauptframe zu laden
<script type="text/javascript">
 function goTo(){
	var link_at = top.location.search;
	if(link_at != ""){
		link_at = link_at.substr(1,link_at.length);
		parent.frames['Main'].location.href = link_at;
		}
	}
window.setTimeout('goTo()',1500);
</script> 


Wenn du es so machen willst wie ich es im Moment habe dann musst du das gerade genannte JavaScript in eine HTML- Datei kopieren die während der ganzen Besuchzeit nicht geändert wird bzw. nicht neu geladen wird. Ich habe sie bei mir mit in der Datei in der ich die Verweise (Menü) habe.
Und in jede andere HTML- Datei muss eines dieser beiden Scripte:
Mit Besucher Fragen:
<script type="text/javascript">
<!--
if(top.name!="NameDesFensters"){
	Check = confirm("Diese Seite wurde nicht in dem dazugehörigen Fenster geöffnet.
		\nMöchten Sie die Seite mit dem dazugehörigen Fenster öffnen?");
	if(Check == true){
		window.location.href="index.html?Andere.html";
		}
	}
//-->
</script>


Ohne Besucher fragen:
<script type="text/javascript">
<!--
if(top.name!="NameDesFensters"){
	window.location.href="index.html?Andere.html";
	}
//-->
</script>


Die beiden Scripte überprüfen ob das Fenster/Frame, in dem sich die Datei befindet, eine bestimmten Namen hat, in diesem fall NameDesFensters.

Wenn du das mit der Abfrage und der Weiterleitung zur eigentlichen Seite nicht willst, dann kannst du es auch weniger kompliziert machen. Z.B. mit den Script aus Antwort 8, das musst du nur in jede HTML- Datei, außer der in der das Frame/Frameset definiert ist, einfügen

So, ich hoffe ich habe dich jetzt mit der Text und Informationsmengen nicht ganz erschlagen, oder dich ganz verwirt. *G*



Hier ist mal ein link zu einer Seite auf meiner HP

Hier findest du noch zwei links zu Seiten wo ich das ganze mit htaccess getestet habe
Hier die Index auf der geleitet wird wenn die Seite von einer fremd...
Und hier eine fremde Seite


MfG
Dr. Ma-Busen

Antwort 20 von sTk

Hallo!
Also grundsätzlich kann ich sagen, dass das ganze nur mit JavaScript zu realisieren ist!
Antwort 14 von Marker sieht schon gut aus, nur verwirren einen die Kommentare!

Ich habe hier noch mal etwas Code für das Problem!

Schreibe in den Head Bereich deiner Frameset-Seite:

<script language="JavaScript" type="text/javascript"> 
<!-- 
if ( self != top ) { 
top.location.href = self.location.href; 
} 

var geladen = "frameladen"; 

function laden() { 
var seite = self.location.search.length; 
var url = self.location.search.substring(1,seite); 

if ( self.location.search.length > 0 ) { 
parent.main.location.href = url; 
} 
} 
//--> 
</script>


und in das Frameset, in dem die verlinkten Seiten angezeigt werden sollen:
onLoad="laden(); return true"


In jede Inhalts-Seite schreibst du in den Head:

<script language="JavaScript" type="text/javascript"> 
<!-- 
var ganz = "frameset.html?" + self.location.pathname; 

if ( top.geladen != "frameladen" ) { 
if ( document.images ) { 
top.location.replace(ganz); 
} else { 
top.location.href = ganz; 
} 
} 
//--> 
</script>


Nun musst du noch den Namen für die Frameset-Datei für dich anpassen, in meinem Fall heißt sie "Frameset.html"!

Das ist das Einzige, was du anpassen mußt, alles andere kannst du eins zu eins so übernehmen!!

Wenn du noch Fragen hast, kannst du mir auch mailen, wenn du willst, kann ich dir auch, soweit ich das weiß, die Codezeilen versuchen zu erklären!!!

bye, sTk

Antwort 21 von Datei

@Dr. Ma-Busen

Geh einfach mal davon aus, dass Du mich ganz verwirrt hast *g*.

Also ich schreibe jetzt mal hier hin, was ich verstanden habe, oder glaube verstanden zu haben und Du liest Dir das dann durch und sagst mir, was da wieder alles falsch war, okay ? Ich glaube nämlich, genau das mit der Endlosschleife hatte ich schon, daher würde ich das gerne erstmal hier mit Dir (oder jemand anderem der Lust hat) quasi offline testen.

Also, im Moment habe ich alle Dateien meiner Seite (bis auf ein - zwei Ausnahmen) in einem Ordner. Das muß ich ändern, weil sonst das .htaccess nicht funktioniert. Also lege ich im Hauptverzeichnis www.meineseite.de ein Verzeichnis für alle HTML-Dateien an und schiebe die da rein (und bearbeite dann die ganzen internen Verlinkungen, damit die auch noch funktionieren *rabääh*).
Dann kann ich in diesem Unterordner (nennen wir ihn mal "docs") eine Datei erstellen, die ? nur .htaccess heisst (also nicht blabla.htaccess ?) und in die ich dann den von Dir beschriebenen Code folgendermaßen einfüge :


RewriteEngine on
Options +FollowSymLinks
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?meineseite.de/.*$ [NC]
RewriteRule ^(.+)$ http://www.meineseite.de/index.htm?$1 [R,L]

(meine Index-Seite hat die Endung htm, nicht html, das muß ich sicher berücksichtigen, oder ?)

Außerdem muß ich dann noch folgenden Code

<script type="text/javascript">
 function goTo(){
	var link_at = top.location.search;
	if(link_at != ""){
		link_at = link_at.substr(1,link_at.length);
		parent.frames['Main'].location.href = link_at;
		}
	}
window.setTimeout('goTo()',1500);
</script> 

in welche Datei schreiben ? In jede HTML-Datei, oder in die Index.htm ?
Muß ich die Begriffe "top", "Main" auf meine Frame-Namen anpassen, oder sind das Scriptbegriffe, mit denen das Script in jedem Fall arbeiten kann ?

Die anderen beiden Scripte brauche ich in dieser Konstellation nicht, oder ?

Soweit erstmal, danach stelle ich bestimmt noch mehr Fragen *fg*.

Tschö
Datei


Antwort 22 von Datei

Uih, da war ja noch was :) .

@sTk

Muß ich da eigentlich bei der JavaScript-Lösung auch beachten, das die Sachen nicht alle im gleichen Ordner liegen dürfen, oder ist das dafür egal ?

[Quote]
und in das Frameset, in dem die verlinkten Seiten angezeigt werden sollen:

onLoad="laden(); return true"



Das war bei Markers Lösung eines der tieferen Mysterien. Wo ganz genau soll dieser Code rein ?
Also meine Framesetdatei ist meine index.htm

Da steht :

<frameset cols="200,*" frameborder="NO" border="0" framespacing="0" >
  <frame name="leftFrame" scrolling="NO" noresize src="left.htm">
  <frameset rows="99,*" frameborder="NO" border="0" framespacing="0" >
    <frame name="topFrame" scrolling="NO" noresize src="head.htm" >
    <frame name="home" src="home.htm" >
</frameset>
</frameset>


Wo genau muß der Schipsel da eingefügt werden ? Oder muß der vielleicht sogar ganz woanders hin ?


Die Frameset.html wäre dann bei mir wieder die index.htm, richtig ?


Tschö
Datei


Antwort 23 von sTk

Hi!!!

Muß erst nochmal was richtig stellen!!!

Du mußt noch was ändern, hab gerade nochmal alles durchgesehen!!!

Schreibe in den Head Bereich deiner Frameset-Seite:


Zitat:
<script language="JavaScript" type="text/javascript">
<!--
if ( self != top ) {
top.location.href = self.location.href;
}

var geladen = "frameladen";

function laden() {
var seite = self.location.search.length;
var url = self.location.search.substring(1,seite);

if ( self.location.search.length > 0 ) {
parent.main.location.href = url;
}
}
//-->
</script>


Die Zeile: parent.main.location.href = url;

muß noch angepasst werden! "main" war bei mir der Name des Frames, wo die Seite geladen werden soll!
Da mußt du den Namen deines Frames vergeben, welchen du bei <frame name="" ...> angegeben hast!

Zitat:
Wo genau muß der Schipsel da eingefügt werden ? Oder muß der vielleicht sogar ganz woanders hin ?


Schreibe das in irgendein <frameset ...> mit rein!

Das bewirkt, dass die Funktion "laden" gestartet wird!!!

Richtig, du mußt dann index.htm eintragen!!!

Und die dateien müssen nicht im gleichen Ordner liegen!!!

bye, sTk

Antwort 24 von Datei

@sTk

Okay, ich glaube, jetzt habe ich es ziemlich verstanden. Nur eins noch :

Zitat:

Und die dateien müssen nicht im gleichen Ordner liegen!!!


Müssen nicht, okay, aber dürfen sie denn im gleiche Ordner liegen ? Wie gesagt, bei mir liegen im Moment alle Dateien im gleichen Ordner. Macht das keine Probleme ?


Drückt mir die Daumen, ich geh das jetzt mal testen :) .


Tschö
Datei



Antwort 25 von sTk

Sicher dürfen sie im gleichen Ordner liegen!

Ist bei wenigen Dateien auch ganz praktisch, kommst du mit den Pfadangaben nicht durcheinander!
Wenns dann mal mehr wird, leidet die Übersichtlichkeit etwas, aber ansonsten kein Problem!!!

FROHES SCHAFFEN UND VIEL EROLG!!!

bye, sTk

Antwort 26 von Datei

Jessss ! Es ist geschafft !

Vielen Dank Euch allen.
Nach einigen Versuchen und wieder einmal einer kleinen Endlosschleife *seufz* habe ich es nun endlich geschafft und die Leute von Google können nun endlich meine Seite in ihrer vollen Pracht bewundern. Auch wenn die meisten Leute wohl eher aus Versehen da landen *g*.

So hab ich jetzt zwar wieder ein paar graue Haare mehr, aber es hat sich gelohnt.

Also nochmal :

VIELEN DANK ! :D


Tschö
Datei

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: