webForumDet fria alternativet

innerHTML till en DIV i en annan frame

15 svar · 425 visningar · startad av nkrantz

nkrantzMedlem sedan apr. 2002830 inlägg
#1

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

JojoxxMedlem sedan juni 20004 308 inlägg
#2

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).

nkrantzMedlem sedan apr. 2002830 inlägg
#3

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

PepeJeriaMedlem sedan feb. 2003774 inlägg
#4

Vad får du för javascript error?

nkrantzMedlem sedan apr. 2002830 inlägg
#5

Jag får inget, det är det som också är lite skumt. Men inget händer...

PepeJeriaMedlem sedan feb. 2003774 inlägg
#6

IE brukar inte vara så bra på att visa felen, om du har Mozilla så kan du kolla efter felet i /tools/Javascript console

JojoxxMedlem sedan juni 20004 308 inlägg
#7

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/>
nkrantzMedlem sedan apr. 2002830 inlägg
#8

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

PepeJeriaMedlem sedan feb. 2003774 inlägg
#9

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.

nkrantzMedlem sedan apr. 2002830 inlägg
#10

Ok, tackar...

Men, frågan kvarstår, måste jag skapa div-en dynamiskt för att kunna skriva till den?

PepeJeriaMedlem sedan feb. 2003774 inlägg
#11

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.

nkrantzMedlem sedan apr. 2002830 inlägg
#12

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?

Jesper TMedlem sedan nov. 20017 144 inlägg
#13

Måste jag öppna div-en, typ parent.frames['right'].document.getElementById('divID').open() innan jag kan skriva till den?

Nej

PepeJeriaMedlem sedan feb. 2003774 inlägg
#14

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.

nkrantzMedlem sedan apr. 2002830 inlägg
#15

Får testa när jag får möjlighet! Tack för hjälpen!

/N

JojoxxMedlem sedan juni 20004 308 inlägg
#16

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.)

141 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)