"parent.bufferFrame.document.location" funktionert nicht aus DIV heraus
Sven-Oliver Schibat
- javascript
Hallo!
Ich möchte eine externe Datei in einen DIV laden. Das möchte ich mit diesem Script machen:
<script language="JavaScript">
<!--
ns4 = (document.layers)? true:false
ie4 = (document.all)? true:false
if (ie4) document.write('<IFRAME STYLE="display:none" NAME="bufferFrame"></IFRAME>')
function loadSource(id,nestref,url) {
if (ns4) {
var lyr = (nestref)? eval('document.'+nestref+'.document.'+id) : document.layers[id]
lyr.load(url,lyr.clip.width)
}
else if (ie4) {
parent.bufferFrame.document.location = url
}
}
function loadSourceFinish(id) {
if (ie4) document.all[id].innerHTML = parent.bufferFrame.document.body.innerHTML
}
//-->
</SCRIPT>
Im Netscape funktioniert das auch ganz wunderbar, nur der IE meldet mir "parent.bufferFrame.document ist kein Objekt". Ich vermute, daß es daran liegt, daß der Link aus einem DIV heraus aufgerufen wird, welches in ein weiteres DIV eingebettet ist.
Kann mir jemand helfen und verraten, was ich tun muß, damit es funktioniert?
Danke im voraus! :-)
Sven
Hallo Sven
else if (ie4) {
parent.bufferFrame.document.location = url
Hier ist mal etwas falsch. Das Objekt 'document' hat keine Eigenschaft 'location'. Es hat zwar die Eigenschaft 'URL', die ist aber ReadOnly.
Dein Code müsste so aussehen:
parent.bufferFrame.location.href = url;
Mehr dazu in <../../tecbe.htm#a5>.
function loadSource(id,nestref,url) {
»» if (ns4) {
»» var lyr = (nestref)? eval('document.'+nestref+'.document.'+id) : document.layers[id]
Weiter ist mir hier der Kontext zum Funktionsaufruf unklar. Insbesondere: Was steht in 'nestref' drin ???
Entweder ist nestref ein Boolean für die If-Abfrage oder es ist ein String, aber nicht beides.
If-Abfragen auf ein String sind unsaubere Programmierung.
Sinnvoll wäre hier:
nestref.length > 0
Dies hängt jedoch von der Parameterliste des Funktionsaufrufs ab.
Wie und mit welchen Werten wird die Funktion aufgerufen?
Interessant wären also die Code-Stellen, in denen die Funktionen aufgerufen werden.
Der Fehler lässt sich so nicht gerade gut erahnen.
Grüsse
Tom
PS:Mein Kaffe hatte heute zuwenig Satz, um in ihm lesen zu können ;-)
Hier ist mal etwas falsch. Das Objekt 'document' hat keine Eigenschaft 'location'. Es hat zwar die Eigenschaft 'URL', die ist aber ReadOnly.
Dein Code müsste so aussehen:
parent.bufferFrame.location.href = url;
Hab's korrigiert! Vielen Dank für den Hinweis! :-) Gebracht hat's aber nix...
Mehr dazu in <../../tecbe.htm#a5>.
function loadSource(id,nestref,url) {
»» if (ns4) {
»» var lyr = (nestref)? eval('document.'+nestref+'.document.'+id) : document.layers[id]Weiter ist mir hier der Kontext zum Funktionsaufruf unklar. Insbesondere: Was steht in 'nestref' drin ???
Entweder ist nestref ein Boolean für die If-Abfrage oder es ist ein String, aber nicht beides.
If-Abfragen auf ein String sind unsaubere Programmierung.
Sinnvoll wäre hier:
nestref.length > 0
Dies hängt jedoch von der Parameterliste des Funktionsaufrufs ab.
Wie und mit welchen Werten wird die Funktion aufgerufen?Interessant wären also die Code-Stellen, in denen die Funktionen aufgerufen werden.
Der Fehler lässt sich so nicht gerade gut erahnen.
Ich muß dazu sagen, daß der Quellcode nicht von mir ist, sondern von http://www.dansteinman.com/dynduo/en/source.html! Bei dem klappt das ganz wunderbar, nur ruft er den Link nicht aus einem Unter-DIV heraus auf, sondern ganz normal. Hier jedenfalls der Aufruf:
<a href="javascript:loadSource('contents',null,'band/jochen_e.html')">
Wie gesagt: Bei Dan klappt's, nur bei mir nicht.
PS:Mein Kaffe hatte heute zuwenig Satz, um in ihm lesen zu können ;-)
*g* Schon klar! :-)
Kannst Du mir mit den neugewonnenen Informationen weiterhelfen?
Sven
Hallo Sven
Ich habe mir mal http://www.dansteinman.com/dynduo/en/source.html angeschaut und weiss jetzt in etwa, was das Ziel ist.
Nur weiss ich noch nicht genau, wie Du es umsetzen willst.
Wie ist das genau mit dem Unter-DIV?
Kannst Du eine URL posten?
Oder wenigstens den HTML-Code mit den DIVs/Layers und seinen Unter-DIVs?
Ein DIV (oder anderes HTML-Element) kannst Du im IE mit folgendem JS-Code ansprechen:
parent.bufferFrame.document.all.SubDiv.location = url;
Dabei hast Du Deinem Unter-Div eine ID gegeben, z.B.:
<div id="SubDiv">
Beachte, dass dies MS-proprietärer Code ist.
In Netscape muss der Unter-Div ein positionierter Layer sein (z.B. <div id="SubDiv" style="position:absolute; left:50; top:50; width:300; height:200;">).
Diesen sprichst Du in JavaScript wie folgt an:
parent.bufferFrame.document.layers["SubDiv"].src = url;
So oder ähnlich sollte es klappen.
Beachte auch, dass jede Befehlszeile in JavaScript mit einem Semikolon ";" abgeschlossen werden sollte.
Weiter enthält der Beispielcode auch noch einige andere Flüchtigkeitsfehler.
Also aufgepasst ;-)
Grüsse
Tom
Hi Phillip,
gibt es auch noch andere Möglichkeiten als mit CSS ?
Noch ne Zusatzfrage:
Wie verhindere Ich die automatische Unterstreichung von Links ?
MfG
Josef
Hallo Sven
Ich habe mir mal http://www.dansteinman.com/dynduo/en/source.html angeschaut und weiss jetzt in etwa, was das Ziel ist.
Nur weiss ich noch nicht genau, wie Du es umsetzen willst.
Wie ist das genau mit dem Unter-DIV?Kannst Du eine URL posten?
Hi Tom!
Hab die Datei mal hochgeladen. Du findest sie unter
http://www.cherokee.de/band_old.html
Ist zwar alles noch in der Entstehungsphase, aber das Problem wird deutlich. :-)
Gruß,
Sven