Body BG-Color auslesen und anderen Frame einfärben
Berni
- javascript
Also ich habe 3 Frames. Im Frame3 ist die Navigation, wenn ich auf einen Navigationsbutton drücke, soll die Hintergrundfarbe des Frame1 ausgelesen werden und auf Frame2 übertragen werden. Ich arbeite mit CSS (background-color:...)
Selber gelingt es mir nicht das gewünschte Ergebnis zu erzielen.
Ich bräuchte bitte eine kleine Javascript-Funktion dafür?
Danke, ganz lieb.
Hallo,
Selber gelingt es mir nicht das gewünschte Ergebnis zu erzielen.
Was hast du denn schon versucht?
Grüsse
Cyx23
Hi,
Selber gelingt es mir nicht das gewünschte Ergebnis zu erzielen.
Hast du schon versucht dein Problem zu lösen?
Wenn ja, woran ist es gescheitert? Kannst du nicht auf den anderen Frame zugreifen, oder weißt du nicht, wie du die Hintergrundfarbe ausliest? Oder beides?
mfG,
steckl
function changeColor(id, color){
document.getElementById(id).style.backgroundColor = color;
}
... damit kann ich den Hintergrund nachträglich ändern, das klappt auch gut.
Aber ich weiss nicht wie man die hintergrundfarbe eines andern frames ausliest und damit einen dritten Frame einfärbt ...
Danke
Hi,
function changeColor(id, color){
document.getElementById(id).style.backgroundColor = color;
}... damit kann ich den Hintergrund nachträglich ändern, das klappt auch gut.
Aber ich weiss nicht wie man die hintergrundfarbe eines andern frames ausliest und damit einen dritten Frame einfärbt ...
So kannst du andere Frames ansprechen.
Das auslesen der Hintergrundfarbe gestaltet sich schwieriger, falls du sie nicht vorher mit Javascript gesetzt hast. Dabei hilft dir die hier vorgestellte Funktionalität getStyle (Du kannst sie direkt in deinen JS-Code kopieren).
Als ersten Parameter erwartet sie das Objekt, dessen CSS-Eigenschaft du auslesen willst, und der zweite ist ein String mit dem Namen der CSS-Eigenschaft.
Hier mal ein Beispiel, das die Hintergrundfarbe der aktuellen Seite (bzw des aktuellen Frames) ausgibt:
function showBgColor()
{
var farbe = getStyle(document.getElementsByTagName('body')[0],'background-color');
alert(farbe);
}
function getStyle(oElm, strCssRule){
var strValue = "";
if(document.defaultView && document.defaultView.getComputedStyle){
strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
}
else if(oElm.currentStyle){
strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
return p1.toUpperCase();
});
strValue = oElm.currentStyle[strCssRule];
}
return strValue;
}
Du musst nur noch den Aufruf von getStyle() so abändern, dass als erster Parameter der Body von dem gewünschten Frame übergeben wird.
mfG,
steckl
Ich sehe schon das wird mir zu kompliziert für mich. Habe eine andere Lösung gefunden für mein Problem. Allerdings bräuchte ich bitte eine Tipp warum es nicht funktioniert, ich möchte einfach ein element in einem anderen Frame einfärben:
function changeColor(id, color){
parent.frames["frame4"].getElementById(id).style.backgroundColor = color;
}
function MM_callJS(jsStr) { //v2.0
return eval(jsStr)
}
im body dann:
<a href="javascript:;" onclick="MM_callJS('changeColor(menubody,#9BCCD1)')">test</a>
Danke für die Info
Hi,
Habe eine andere Lösung gefunden für mein Problem. Allerdings bräuchte ich bitte eine Tipp warum es nicht funktioniert,
Du hast eine "Loesung" gefunden, die nicht funktioniert ...?
Danke für die Info
Schau in die JavaScript-Konsole deines Browsers, was fuer Fehler die dir meldet. Zum testen empfiehlt es sich, erst mal den Firefox zu nehmen - die Fehlermeldungen des IE sind meist unaussagekraeftig.
MfG ChrisB
Hi,
Ich sehe schon das wird mir zu kompliziert für mich. Habe eine andere Lösung gefunden für mein Problem.
Mir ist gestern noch eingefallen, dass es wohl für dich am einfachsten wäre, wenn du die Navigation auf allen Seiten einbindest und auf das Frameset verzichtest. Dann hätte sie automaitsch den gleichen Hintergrund wie der Rest der Seite.
function changeColor(id, color){
parent.frames["frame4"].getElementById(id).style.backgroundColor = color;
}
function MM_callJS(jsStr) { //v2.0
return eval(jsStr)
}
Was bezweckst du mit dieser Funktion? Sie ruft doch nur eine andere Funktion auf. Du könntest die andere Funktion ja auch direkt aufrufen:
im body dann:
<a href="#" onclick="changeColor('menubody','#9BCCD1');return false">test</a>
Das return false sorgt dann noch dafür, dass dem Linkziel (href) nicht gefolgt wird, falls JS eingeschaltet ist.
Wenn du etwas an eine Funktion übergeben willst, was keine JS-Variable, bzw. kein JS-Objekt (oder ähnliches) ist, also (wie in deinem Fall) ein String, musst du ihn in Anführungszeichen schreiben.
Wie dir ChrisB bereits empfohlen hat eignet sich die Fehlerkonsole vom Firefox gut um solche Fehler zu finden.
mfG,
steckl
Hi,
Mir ist gestern noch eingefallen, dass es wohl für dich am einfachsten wäre, wenn du die Navigation auf allen Seiten einbindest und auf das Frameset verzichtest.
In den FAQ steht auch beschrieben wie das geht.
mfG,
steckl
Hallo,
Aber ich weiss nicht wie man die hintergrundfarbe eines andern frames ausliest und damit einen dritten Frame einfärbt ...
Es geht also einmal darum, die betr. Eigenschaft auszulesen, und dann die
"Adressierung" über die Frames.
Falls du dich mittlerweile vielleicht doch etwas in JavaScript eingeguckt
hast, ist vielleicht dieses Beispiel zu getComputedStyle noch interessant.
Von den im ersten Beispielcode mittels if unterschiedenen Möglichkeiten
sind für heute übliche Browser wohl nur noch die ersten wichtig, also:
if(window.getComputedStyle)
Farbe=
window.getComputedStyle(document.getElementById("sample"), "").getPropertyValue("background-color");
else if(document.getElementById("sample").currentStyle)
Farbe=
document.getElementById("sample").currentStyle.backgroundColor;
"sample" entspricht deinem "getElementById(id)", "Farbe" deinem "color".
Vielleicht kannst du das erstmal ohne Frames aufbauen, und wenn es läuft,
noch das Ansprechen über die Frames vor das getElementById("sample") setzen.
Aufruf des Scripts ggf. erst dann, wenn die beteiligten Seiten alle in den
Frames geladen sind.
Grüsse
Cyx23