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
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>
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!
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>)
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
http://www.dotnetjob.de - .NET-Stellenbörse
https://www.xing.com/net/asp.net/ - ASP.NET bei XING
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>)
Ok.