Det borde ju inte vara några svårigheter att göra, men parent.frames['right'].document.getElementById('divID').innerHTML='some new content here...'; funkar inte.
Läste något om att detta inte skulle funka, varför och hur löser man det?
// Nippe
15 svar · 425 visningar · startad av nkrantz
Det borde ju inte vara några svårigheter att göra, men parent.frames['right'].document.getElementById('divID').innerHTML='some new content here...'; funkar inte.
Läste något om att detta inte skulle funka, varför och hur löser man det?
// Nippe
Det fungerar så länge som rättigheterna tillåter det. D.v.s. de båda dokumenten som ligger i resp. frame måste ligga på samma domän. (...och givetvis att det inte är några alvarliga fel på dokumentstruktur (att det validerar) och att du inte har scriptfel någonstanns på sidan så att script-exekveringen avbryts).
Det ligger i samma domän, strukturen är korrekt. Det kanske är det här med domänen som strular, kör det lokalt och då finns det ju ingen domän... Lite långsökt kanske?
// Nippe
Vad får du för javascript error?
Jag får inget, det är det som också är lite skumt. Men inget händer...
IE brukar inte vara så bra på att visa felen, om du har Mozilla så kan du kolla efter felet i /tools/Javascript console
Ingen liten skylt längst ner till vänster i status-raden som säger "Fel på sidan."? Ligger båda dokumenten lokalt så skall det iofs inte vara några problem med det. Då skulle jag snarare gissa på fel i dokumentet eller att frames-strukturen inte stämmer (parent.right).
Ett litet exempel:
<iframe name="right"></iframe><br/>
<a href="#" onclick="frames['right'].document.write('<div id=\\'divID\\'>En div</div>');">Skriv en div</a><br/>
<a href="#" onclick="frames['right'].document.getElementById('divID').innerHTML='some new content here...';">Ändra innehållet</a><br/>
Måste jag skapa Div-en dynamiskt med Javascript för att det skall funka?
Eller varför gjorde du det i din kod?
// Nippe
Jag gjorde en funktion av första (lättare kunna få en bra överblick):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
<script type="text/javascript">
function writeToFrame(html)
{
var oFrame = window.frames["right"];
oFrame.document.open();
oFrame.document.write(html);
oFrame.document.close();
}
</script>
</head>
<body>
<iframe name="right"></iframe><br/>
<a href="#" onclick="writeToFrame('<div id=\'divID\'>En div</div>'); return false;">Skriv en div</a><br/>
<a href="#" onclick="frames['right'].document.getElementById('divID').innerHTML='some new content here...'; return false;">Ändra innehållet</a><br/>
</body>
</html>
Men felet var bland annat att du hade:
document.write('<div id='divID'>En div</div>');
Det som händer då är att strängen blir "<div id=", men om du escapar ' med \' så fungerar det fint.
Sen när man skriver till en iframe så måste du köra med document.open, document.write och document.close
Utan document.open så laddade browsern om huvudsidan och laddade i evigheter.
Ok, tackar...
Men, frågan kvarstår, måste jag skapa div-en dynamiskt för att kunna skriva till den?
Det är ju det du gjorde, genom att skriva till iframe med document.write så skapar du den dynamiskt, du skulle även kunna göra samma sak med document.createElement och sen köra appendChild till iframen, blir samma resultat.
Förstår inte riktigt din fråga dock, men ja, du måste skapa den först innan du skriver till den, alternativet är att ha en src på iframen innehållande en div.
Okej, tar det från början ;) Det var Jojoxx som skrev koden som du skrev om sedan.
Så som jag hade det var att jag i min ena frame (right) hade en div, enligt: <div id="namnet"></div> Sedan ville jag från en annan frame skriva till denna div. Jag använde: parent.frames['right'].document.getElementById('divID').innerHTML='some new content here...'; men det funkade inte.
Måste jag öppna div-en, typ parent.frames['right'].document.getElementById('divID').open() innan jag kan skriva till den?
Måste jag öppna div-en, typ parent.frames['right'].document.getElementById('divID').open() innan jag kan skriva till den?
Nej
Nej, för att skriva till div:en kan du använda dig av innerHTML, document.open/write/close använder du för frames.
Exemplet ovan som jag postade (med din kod för att skriva till div:en) fungerar utmärkt.
PepeJeria skrev:
Men felet var bland annat att du hade:
document.write('<div id='divID'>En div</div>');
Som du märker så snor forumet några \ :) (Har ändrat exemplet.)