Flash an Fenster anpassen

M

Matthias_Nordwig

Hallo, ich habe mir bisher folgendes Script geschrieben um das Flash immer an die maximal mögliche Größe anzupassen, ohne dabei das Verhältniss "800:600,1024:768,..." zu verlieren:

width = document.body.offsetWidth;
height = document.body.offsetHeight;
fla_width = 0;
fla_height = 0;
function check_window()
{
if ((height!=document.body.offsetHeight) || (width!=document.body.offsetWidth))
{
height=document.body.offsetHeight;
width=document.body.offsetWidth;
set_fla();
}
}
function set_fla()
{
if ((width/height)<(800/600))
{
fla_width = width-3;
fla_height = (fla_width*600)/800;
}
else
{
fla_height = height-3;
fla_width = (fla_height*800)/600;
}
document.getElementById("uhr").style.width=fla_width;
document.getElementById("uhr").style.height=fla_height;
//document.getElementById("uhr2").style.width=fla_width;
//document.getElementsByName("uhr").style.height=""fla_height;
_______________________________________________________
Hier ist das Problem:
Das was dort als Kommentar markiert ist(//document.getElementById("uhr2").style.width=fla_width;
//document.getElementsByName), funktioniert zwar in Opera, jedoch nicht im ie. Umgekehrt, wenn ich das so anspreche wie das nicht auskommentierte(document.getElementById("uhr").style.width=fla_width;
document.getElementById("uhr").style.height=fla_height;), dann das im ie jedoch nicht im Opera.
Hat jemand dafür eine Lösung? Ich möchte auf keinen Fall einen Browserswitch machen, da diese sich ja maskieren lassen. bzw. Mein Opera wird als ie anerkannt.
_______________________________________________________


}
set_fla();
window.setInterval("check_window()",100);

Mit freundlichen Grüßen

Matthias Nordwig
 
Hi,

auch wenn ich aus Deiner Beschreibung nicht ganz schlau werde... eine Browserweiche mit
PHP:
if (document.getElementById("Uhr")) {
    // it might be internet-explorer
} else if (document.getElementsByName("Uhr")) {
    // it might be opera
} else {
    // it might be something very strange
}
dürfte jedenfalls unabhängig von Maskierungen laufen.

Gruß

P.S.: eine andere Möglichkeit wäre, die SWF in eine Tabelle oder ein DIV mit relativen Größenangaben zu setzen (wobei das SWF die relativen Angaben width=100% und height=100% bekommt).
 
Zuletzt bearbeitet:
1. Nein das habe ich net gesucht
Das im Übrigen auch nicht da Opera auch ID's kennt.
Aber: Die Logik währe zu gebrauchen. Hat IE und Opera sonst irgendeinen besonderen Unterschied, der nach Boolean zu unterschiedlichen Ergebnissen führt?

2. ich möchte ja das verhältniss von Länge und Höhe beibehalten das sich das nicht verzieht.

Trotzdem danke!

Mit freundlichen Grüßen

Matthias Nordwig
 
Hier nocheinmal der exakte unterschied:

Opera:

document.getElementById("uhr2").style.width=fla_width;
document.getElementById("uhr2").style.height=fla_height;

(Ich schpreche hier ein <EMBED> an)

IE:

document.getElementById("uhr").style.width=fla_width;
document.getElementById("uhr").style.height=fla_height;

(Ich spreche hier ein <Objekt> an)

Sorry hatte das Problem falsch beschireben.
Nun müsste ich diese ggf. switchen, da der für Opera beim ie ein Exception hervorruft. p.s. "getElementsByName" scheint das alles nicht zu unterstützen.

Mit freundlichen Grüßen

Matthias Nordwig
 
Hi,

ach so...

Ich habe es vor einiger Zeit mal so gemacht:
PHP:
document.flashname.width=640;
document.flashname.height=480;
Dabei ist "flashname" die ID im Object und der Name im Embed... habe es allerdings nicht mit Opera getestet.

Zu 2.: Die Seitenverhältnisse werden beibehalten, wenn Du kein <scale="exactfit"> oder <scale="noborder"> verwendest.

Gruß
 
Hi

Thx nochmal.

Ich habe zwar herausgefunden woran der Fehler lag.
Nun möchte ich jedoch gar kein <objekt> mehr verwenden,
sondern nur noch embed, da der eine höhere Browserkompatibilität aufweist. :)
Dummerweise geht das da nicht so einfach, da kein Browser das so wie du das beschrieben hast beim embed unterstützt.
Der IE hingegen unterstützt zwar:
"document.getElementById("uhr").width"
Aber Opera nicht
Und
"document.getElementById("uhr").style.width"

unterstützt zwar Opera aber IE nicht. Letzterer gibt zu allem Überfluss auch noch ein Exception aus zu allem Übel auch noch ein Exception aus.
Und exactfit ist das einzige was sich 1. verändern lässt, 2. ohne das es Dinge die über den Rand hinausgehen anzeigt.

Mit freundlichen Grüßen

Matthias Nordwig
 
Hi Habs jetzt.
Wen es interessiert:

width = document.body.offsetWidth;
height = document.body.offsetHeight;
fla_width = 0;
fla_height = 0;
function check_window()
{
if ((height!=document.body.offsetHeight) || (width =document.body.offsetWidth))
{
height=document.body.offsetHeight;
width=document.body.offsetWidth;
set_fla();
}
}
function set_fla()
{
if ((width/height)<(800/600))
{
fla_width = width-3;
fla_height = (fla_width*600)/800;
}
else
{
fla_height = height-3;
fla_width = (fla_height*800)/600;
}
document.getElementById("uhr").style.width=fla_width;
document.getElementById("uhr").style.height=fla_height;
}
set_fla();
window.setInterval("check_window()",100);

Weis net warum ich das nict gleich so gemacht habe. Wahrscheinlich genug gearbeitet heute. :)
 
Nun möchte ich jedoch gar kein <objekt> mehr verwenden, sondern nur noch embed, da der eine höhere Browserkompatibilität aufweist
äh. Du willst ernstlich das <Object>-Tag weglassen? ;)
Bedenke: mit dem Object-Tag erzeugst Du gültiges HTML - das Embed-Tag dient eigentlich nur der Kompatibilität zu Netscape-basierten Browsern (siehe SELFHTML)

ich würde Dir raten, diese Entscheidung doch noch einmal zu überdenken...

Gruß
 
Stimmt.
Hattest übrigens recht lol hab das vorhin anscheinend nicht richtig gelesen:
Ab in nen div damit ! :)

MfG
Matthias
 
Ohne Object geht meines Wissens im IE gar nix, oder habe ich da was verpennt - das letzte Mal, das ich das probiert habe, war das jedenfalls so ....

Ausserdem solltet ihr euch gut überlegen, ob ihr JavaScript UND Flash verwoben auf einer Page einsetzt, meiner Meinung nach schliesst ihr damit zuviele Leute aus, zumal man ein solches Provbelm locker mit Flash / PHP lösen kann.....ohne Browserinkompatibilitäten und den ganzen Murks.

Grüsse
B
 

Neue Beiträge

Zurück