Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Probleme mit top.frames[''] in Safari 3.0.4

0 views
Skip to first unread message

Thomas Bandt

unread,
Mar 16, 2008, 5:03:41 PM3/16/08
to
Hallo zusammen,

ich habe eine browserbasierte Softwareanwendung, die ein
recht verschachteltes Frameset verwendet. Hier möchte ich
nun über

top.frames["toolbar"].Funktion();

eben jene JavaScript-Funktion aufrufen. Das funktioniert
in Opera, IE6, IE7 und Firefox problemlos, nur Safari 3.0.4
zickt hier rum - sowohl die Windows- als auch die Mac-
Version (beides eben getestet).

Ein alert(top.frames["toolbar"]) liefert immerhin noch
[object BarInfo], jeder Versuch irgendwas des Frames
anzusprechen schlägt aber fehl - selbst location ist
leer. Die JavaScript-Konsole meldet beim Aufruf der
Funktion dann schlicht "Undefined value";

Das ist jetzt insofern nicht so dramatisch, als dass der
Browser den Benutzer ja nicht direkt mit Fehlermeldungen
penetriert und ich auf die Funktionen verzichten könnte,
aber nachdem die Anwendung zu 99,5% perfekt im Safari
läuft hätte ich halt gerne dieses blöde halbe Prozent
auch noch.

Irgendwelche Ideen, bzw. kann das jemand reproduzieren?

P.s.: Es läuft alles unter der selben Domain, im
Moment ist es sogar nur localhost)

--
Gruß, Thomas [MVP ASP/ASP.NET]
http://www.69grad.de - Beratung, Entwicklung
http://www.dotnetjob.de - .NET-Stellenbörse
https://www.xing.com/net/asp.net/ - ASP.NET bei XING
http://blog.thomasbandt.de - Thomas goes .NET

Thomas 'PointedEars' Lahn

unread,
Mar 16, 2008, 7:53:43 PM3/16/08
to
Thomas Bandt wrote:
> Ein alert(top.frames["toolbar"]) liefert immerhin noch
> [object BarInfo], jeder Versuch irgendwas des Frames
> anzusprechen schlägt aber fehl - selbst location ist
> leer. Die JavaScript-Konsole meldet beim Aufruf der
> Funktion dann schlicht "Undefined value";

Das kann ich für Safari 3.0.4 (523.15) und Windows XP SP-2 bestätigen. Zwar
nicht für top.frames["toolbar"] -- damit sprichst Du offenbar die
Safari-Toolbar an statt Deines Frames; die einzige aufzählbare Eigenschaft
des Objekts ist anscheinend `visible' (read only) -- aber für Funktionen,
die in Dokumenten in anderen Frames (hier: foo) definiert wurden und mit
window.parent.frames["foo"].funktion() aufgerufen werden sollen; jene
Eigenschaft ist schlicht nicht verfügbar.

> [...]


> Irgendwelche Ideen, bzw. kann das jemand reproduzieren?

Ja. Ich sehe aber nicht, wie man das Problem umgehen könnte. Du solltest
ausserdem bedenken, dass Safari 3.0.4 noch eine Beta-Version ist. Dafür
irgendwelche Verrenkungen zu machen, halte ich daher für sinnfrei.

Den Test auf die Methode habe ich ohnehin eingebaut, weil ich nicht davon
ausgehen kann, dass das Dokument im Frameset angezeigt wird.

var o;
if (typeof window != "undefined"
&& window
&& typeof window.parent != "undefined"
&& (o = window.parent)
&& typeof o.frames != "undefined"
&& (o = o.frames)
&& typeof o["ufpdb_banner"] != "undefined"
&& (o = o["ufpdb_banner"])
&& isMethod(o, "makeLeftBanner"))
{
o.makeLeftBanner();
}

> P.s.: Es läuft alles unter der selben Domain, im
> Moment ist es sogar nur localhost)

Dito hier.


PointedEars, mit passender zufälliger Signatur
--
Wenn es dort funzt, dann ist für Altlasten einfach eine Upgrade-Aufforderung
einzubauen. Du kannst einer Mücke nicht beibringen, einen Haufen zu machen
wie ein Elefant. Wer so große Häufchen haben will, soll sich gefälligst
einen Elefant zulegen.
-- Georg Maaß in dcljs <an94b3$c0ogv$3...@ID-3551.news.dfncis.de>

Thomas Bandt

unread,
Mar 17, 2008, 5:38:34 AM3/17/08
to
Thomas 'PointedEars' Lahn schrieb:

> Das kann ich für Safari 3.0.4 (523.15) und Windows XP SP-2 bestätigen. Zwar
> nicht für top.frames["toolbar"] -- damit sprichst Du offenbar die
> Safari-Toolbar an statt Deines Frames

That's it. Safari hält scheinbar eine Liste reservierter
Schlüsselwörter bereit, die für Fensternamen nicht
verwendet werden dürfen - darunter jetzt definitiv
"toolbar" und "menubar" - sieht verdächtig nach dieser
Liste hier aus:
http://de.selfhtml.org/javascript/objekte/window.htm#open

Nachdem ich die zwei IDs bzw. Namen geändert habe,
geht es jetzt einwandfrei.

Danke für den Hint! :-)

--
Gruß, Thomas [MVP ASP/ASP.NET]
http://www.69grad.de - Beratung, Entwicklung

http://www.dotnetjob.de - .NET-Stellenmarkt
https://www.xing.com/net/asp.net - ASP.NET bei Xing!

Thomas 'PointedEars' Lahn

unread,
Mar 17, 2008, 4:02:03 PM3/17/08
to
Thomas Bandt wrote:
> Thomas 'PointedEars' Lahn schrieb:
>> Das kann ich für Safari 3.0.4 (523.15) und Windows XP SP-2 bestätigen.
>> Zwar nicht für top.frames["toolbar"] -- damit sprichst Du offenbar die
>> Safari-Toolbar an statt Deines Frames
>
> That's it. Safari hält scheinbar eine Liste reservierter Schlüsselwörter
> bereit, die für Fensternamen nicht verwendet werden dürfen - darunter
> jetzt definitiv "toolbar" und "menubar" - sieht verdächtig nach dieser
> Liste hier aus: http://de.selfhtml.org/javascript/objekte/window.htm#open

ACK

> Nachdem ich die zwei IDs bzw. Namen geändert habe, geht es jetzt
> einwandfrei.

Prima :)

> Danke für den Hint! :-)

Gern geschehen. Die Ursache für das Versagen war bei mir glücklicherweise
auch nur eine Race Condition (Zielframe war noch nicht fertig geladen).


PointedEars, Thomaten[tm] auf den Augen gehabt habend
--
Kopf = {};
Kopf.onzahnweh = aua;
function aua(){alert('Aua!');}
(Georg Maaß in dcljs <b57n6s$26cacq$1...@ID-3551.news.dfncis.de>)

Thomas Bandt

unread,
Mar 17, 2008, 5:17:34 PM3/17/08
to
Thomas 'PointedEars' Lahn schrieb:

> Gern geschehen. Die Ursache für das Versagen war bei mir
glücklicherweise
> auch nur eine Race Condition (Zielframe war noch nicht fertig geladen).

Lässt sich das eigentlich vernünftig abfangen? Ich
habe mir bisher mit setTimeout() beholfen, aber so
ganz glücklich ist das nicht.

--
Gruß, Thomas [MVP ASP/ASP.NET]
http://www.69grad.de - Beratung, Entwicklung

Thomas 'PointedEars' Lahn

unread,
Mar 17, 2008, 5:51:51 PM3/17/08
to
Thomas Bandt <info.without.tha...@thomasbandt.de> wrote:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Bitte korrigiere Deinen "From"-Header, so dass er RFC1036, Abschnitt 2.1.1,
bzw. RFC2822, Abschnitt 3.4, sowie der "Netiquette für 'de.*'" entspricht.
Zur Spamvermeidung lassen sich (gültige) "From"- und "Reply-To"-Header
kombinieren.

http://www.gerlo.de/falsche-email-adressen.html

> Thomas 'PointedEars' Lahn schrieb:
> > Gern geschehen. Die Ursache für das Versagen war bei mir
> glücklicherweise
>> auch nur eine Race Condition (Zielframe war noch nicht fertig geladen).

Brrr. Bitte vor dem Posten nochmal korrekturlesen. Thunderbird hat auch
unter Edit, Rewrap eine nette Funktion, die man sich in die Toolbar legen kann.

> Lässt sich das eigentlich vernünftig abfangen? Ich
> habe mir bisher mit setTimeout() beholfen, aber so
> ganz glücklich ist das nicht.

Da Du nie weisst, welcher Frame zuerst geladen wird, ist window.setTimeout()
hier IMHO die beste Lösung. Es ist vermutlich sinnvoll, die "Warteschleife"
gar nicht erst zu beginnen, wenn window == window.top ist.


PointedEars
--
CSS ist keine Darstellungsvorschrift, sondern ein Darstellungsvorschlag
mit eingebautem "Ich weiß es aber besser"-Recht auf Seiten des userAgent.

(Georg Maaß in dcljs <amuna7$9fbuu$1...@ID-3551.news.dfncis.de>)

Thomas Bandt

unread,
Mar 18, 2008, 3:41:06 AM3/18/08
to
Thomas 'PointedEars' Lahn schrieb:

> Da Du nie weisst, welcher Frame zuerst geladen wird, ist window.setTimeout()
> hier IMHO die beste Lösung. Es ist vermutlich sinnvoll, die "Warteschleife"
> gar nicht erst zu beginnen, wenn window == window.top ist.

Ok.

0 new messages