Avatar billede lone_a_p Praktikant
14. november 2007 - 15:23 Der er 37 kommentarer og
1 løsning

Hente html-kode ind i javascript

Jeg har en IFRAME som jeg senere erstatter med:

document.getElementById("iframe").src = "minURL.php?"+h+"=30";

Men når jeg gør dette lyder der et "klik" hver gang den ny src hentes ind. Det kunne godt være lidt irriterende at høre på i længden, så er der nogen der har en anden løsning til, hvordan jeg henter og udskifter noget allerede lavet javascript/html-kode sidst i dokumentet?

Mvh Lone
Avatar billede w13 Novice
14. november 2007 - 16:02 #1
Hvis det kan løse problemet bare at reloade siden, men uden kliklyd, så prøv:

document.getElementById("iframe").contentWindow.location.reload(true);

Du kan godt erstatte HTML i IFramet, men for at det skal være ordentlig kode, skal din side være programmeret i så korte og simple koder som muligt, og det samme gælder det, du sætter ind. Hvad vil du sætte ind i IFramet og hvor? Kan vi se et eksempel?

F.eks. kan du bruge koden:

document.getElementById("iframe").contentWindow.document.getElementsByTagName("body")[0].appendChild(document.getElementById("iframe").contentWindow.document.createTextNode("Hello world!"));
Avatar billede jokkejensen Novice
14. november 2007 - 17:10 #2
Hvor skarp er du Lone?

Ellers lyder det som en opgave der kan løses perfekt med lidt meget simpel ajax.

Teknisk set, kan du bare lade din minurl.php returnere hvad du ellers har i din iframe, asynokront kalde den, og ligge det i et div, med

document.getElementById("DivDerSkalHaveContent").innerHMTL = AjaxKald();
Avatar billede lone_a_p Praktikant
14. november 2007 - 18:14 #3
Ikke skarp nok til ajax desværre ;)

Det kan ikke nytte noget bare at reloade.

Kigger lige på de 2 nederste koder fra w13
Avatar billede w13 Novice
14. november 2007 - 18:41 #4
Ok. Men bemærk, at "de 2 nederste" kun er én linje. Hvis du deler den op, får du fejl. =)
Avatar billede lone_a_p Praktikant
14. november 2007 - 19:11 #5
det er nogle bannere jeg loader ind i iframen, alt efter hvor meget plads der er til dem - derfor "efterkaldet" med src
Avatar billede w13 Novice
14. november 2007 - 19:20 #6
Du kan "bygge" et banner nogenlunde sådan her:
----------------------------------------------
var strDocument=document.getElementById("iframe").contentWindow.document;
var newElement=strDocument.createElement("img");
newElement.setAttribute("src","/images/banner1.jpg");
newElement.style.borderWidth="0";
strDocument.getElementsByTagName("body")[0].appendChild(newElement);
----------------------------------------------
Dét kaldes DOM (Document Object Model) og det er hamrende smart og hamrende gyldig, uptodate kodning! :) Det kan kun anbefales, at du bliver stærk i DOM.
Avatar billede lone_a_p Praktikant
14. november 2007 - 20:27 #7
jeg har brug for at hente html-kode fra en php-fil, som genererer html-koden

altså myphpfile.php:
<HTML>
.... osv, mine bannere er her
</HTML>

i filen hvor ovenstående skal hentes ind vha. java script:
<IFRAME src=myphpfile.php?h=500>    ... eller hvordan det nu skal gøres


Det jeg har brug for er at sende h-variablen med - det angiver hvor mange bannere der kan blive plads til.
Avatar billede lone_a_p Praktikant
14. november 2007 - 20:28 #8
det fungerer sådan set fint nok med iframe ... bortset fra det klikken der kommer, det er :(
Avatar billede w13 Novice
14. november 2007 - 20:31 #9
Nu er jeg på ingen måde med på, hvad du vil mere. =S Kan du ikke smide et link til siden, så vi kan se det i aktion?

Du skulle også gerne kunne fjerne kliklyden ved at lægge følgende kode ind i myphpfile.php:

setTimeout("window.location.refresh(true)",200000);

Og så lade den linje opdatere.
Avatar billede w13 Novice
14. november 2007 - 20:33 #10
Men hvad gør myphpfile.php udover at indeholde bannere? Hvorfor skal den opdatere?
Avatar billede lone_a_p Praktikant
14. november 2007 - 20:47 #11
ok - madital.dk :) bare gå efter klikket ;)

jeg laver en random på googleadds og nogle andre udbydere, så du skal evt. lige "opdatere dig frem til det"
Avatar billede w13 Novice
14. november 2007 - 21:05 #12
Hvornår siger du, den klikker? Den opdaterer da ikke før jeg trykker opdater, gør den?
Avatar billede lone_a_p Praktikant
14. november 2007 - 21:12 #13
den opdaterer ikke hele siden - kun reklamerne ude til højre (billed-reklamerne). Lige når de kommer frem viser der sig en hvid firkant i et splitsekund, samtidig med at der lyder en klik (som et museklik), hvis du har slået lyden til.
Avatar billede w13 Novice
14. november 2007 - 21:23 #14
Jeg ser den hvide firkant nu, men jeg må ha' slået kliklyden fra et sted. Med mindre de har droppet den i IE7? Bruger du IE7 eller IE6?

Nå, men skriv i hvert fald lige den kode, som er i den hvide firkant - altså før reklamerne vises.
Avatar billede lone_a_p Praktikant
14. november 2007 - 21:28 #15
det er blot en iframe - der er ikke noget kode

<iframe height=1px id=banneriframe frameborder=0 scrolling=no marginheight=0 marginwidth=0 allowtransparency="true"></iframe>

herefter kommer "opdateringen", som laver klikket (den sidder i body onload):

document.getElementById("banneriframe").src = "/adds.php?height="+(document.getElementById("hovedfelt").offsetHeight + 131)+"&res=2";
Avatar billede lone_a_p Praktikant
14. november 2007 - 21:33 #16
jeg bliver nødt til hoppe af i en times tid, men derefter kigger jeg lige ind igen for at se, om du evt. har en løsning :)
Avatar billede w13 Novice
14. november 2007 - 21:49 #17
Hvorfor retter du ikke bare:
<iframe height=1px id=banneriframe frameborder=0 scrolling=no marginheight=0 marginwidth=0 allowtransparency="true"></iframe>
til:
<iframe height=1px id=banneriframe frameborder=0 scrolling=no marginheight=0 marginwidth=0 allowtransparency="true" src="/adds.php?res=2&height=200"></iframe>
Avatar billede lone_a_p Praktikant
14. november 2007 - 23:00 #18
fordi height kommer først frem, når hele dokumentet er loaded

document.getElementById("banneriframe").src = "/adds.php?height="+(document.getElementById("hovedfelt").offsetHeight + 131)+"&res=2";

højden bestemmer hvor mange pixels jeg har at gøre godt med til reklamer - jeg vil have det sådan at det fylder pladsen ud ude til højre (altså ca. lige så højt som det grå felt), i al fald ikke mere, men evt. mindre, hvis scriptet ik lige kan få det til at passe
men alt det har jeg lavet ... det er den der efterload der volder problemer.

måske jeg alligevel skal kigge på det ajax for det bruger jeg også til chatten, men det er kun noget tilrettet noget fra en der har gjort det tilgængeligt på nettet
Avatar billede w13 Novice
15. november 2007 - 01:53 #19
Tjaeh. Ajax skal man alligevel passe lidt på med.

Må jeg se den kode, du bruger i IFramet?
Avatar billede lone_a_p Praktikant
15. november 2007 - 10:22 #20
jeg har ikke nogen kode i iframet

den kommer først ind til sidst (se 5 indlæg oppe)
Avatar billede w13 Novice
15. november 2007 - 13:56 #21
Nå ja, selvfølgelig.. Hmm..

Har du selv forslag til, hvordan det ellers sku' bygges op, som jeg kan hjælpe med. For umiddelbart ser det ud til, du vil have kliklyden uanset hvad.
Avatar billede lone_a_p Praktikant
15. november 2007 - 15:11 #22
Ville man ik komme ud over det med ajax? Der lyder da i al fald ikke en kliklyd hver gang der kommer nyt i chatten, og den opdateres hele tiden - det må jeg gå ud fra, at jeg også kan undgå ved reklamerne så.
Avatar billede w13 Novice
15. november 2007 - 15:15 #23
Jo, det ville du kunne. Så skal du have en side at vise i IFramet fra start, som kalder Ajax'en.
Avatar billede lone_a_p Praktikant
15. november 2007 - 15:19 #24
Kode 1:

<iframe height=1px id=banneriframe frameborder=0 scrolling=no marginheight=0 marginwidth=0 allowtransparency="true"></iframe>

herefter kommer "opdateringen", som laver klikket (den sidder i body onload):
(her skal ajax ind på en eller anden vis)

document.getElementById("banneriframe").src = "/adds.php?height="+(document.getElementById("hovedfelt").offsetHeight + 131)+"&res=2";
Avatar billede w13 Novice
15. november 2007 - 17:46 #25
Det kan reelt set laves sådan, men jeg vil foreslå, at du laver en side at vise i IFramet. Eks.

<iframe height=1px id=banneriframe src="ajaxbanner.htm" frameborder=0 scrolling=no marginheight=0 marginwidth=0 allowtransparency="true"></iframe>

og i ajaxbanner.htm:
------------------------------------------
<html>
<head>

<script type="text/javascript">
var height=document.getElementById("hovedfelt").offsetHeight+131;
var res=2;

//Noget Ajax
</script>

</head>
<body>

<!--Noget banner-->

</body>
</html>
Avatar billede lone_a_p Praktikant
15. november 2007 - 17:52 #26
Det kommer blot stadig ikke min efterload til gode, for bannerne skal først (helst) indlæses når hele sitet er indlæst
Avatar billede lone_a_p Praktikant
15. november 2007 - 17:53 #27
Det ser i øvrigt ud til at jeg slet ikke kan sætte en height på min iframe i firefox - det ser ikke ud til at jeg er nærved den rigtige løsning :(
Avatar billede w13 Novice
15. november 2007 - 17:54 #28
Ja, men du kan så kalde Ajax-funktionen ude fra hovedsiden. Det kan du gøre i hovedsiden sådan her:

<body onload="document.getElementById("banneriframe").contentWindow.AjaxFunction()">
Avatar billede w13 Novice
15. november 2007 - 17:55 #29
Det kan man i firefox. Jeg har tit gjort det selv. Har du prøvet med CSS?

<iframe style="height:1000px" ...></iframe>
Avatar billede lone_a_p Praktikant
15. november 2007 - 18:01 #30
ja, jeg synes jeg har prøvet, men den bliver ved med ikke at ville passe, den har kun én størrelse, og det kan jeg ikke rokke ved
Avatar billede w13 Novice
15. november 2007 - 18:13 #31
Men har du da kunne få den til at makke ret i firefox?

Og kunne det ikke have noget at gøre med dens "beholder", der heller ikke er stor nok.
Avatar billede lone_a_p Praktikant
15. november 2007 - 18:16 #32
Det ser ud til at man ikke kan ændre højden på en iframe senere hen (med javascript) i firefox.

Nu har jeg bare givet den en given højde på 600, så virker det udmærket.

Ville bare helst have kunnet det andet, har bare ik lige tid til at kigge på det længere i aften.

Tak for hjælpen indtil nu :)
Avatar billede w13 Novice
15. november 2007 - 18:17 #33
Ok. Ellers så skrev lige koden, du bruger til at ændre højden med.
Har gjort det før, så forhåbentlig kunne jeg lige få det til at fungere her osse.
Man skal dog vistnok gøre det på en speciel måde.
Avatar billede lone_a_p Praktikant
15. november 2007 - 22:28 #34
document.getElementById("banneriframe").height = document.getElementById("hovedfelt").offsetHeight;
Avatar billede w13 Novice
15. november 2007 - 22:34 #35
Du kan evt. prøve at alerte offsetHeight for hovedfelt og se, om den giver en korrekt værdi.

Og så bør du prøve at sætte højden med:

document.getElementById("banneriframe").setAttribute("height",document.getElementById("hovedfelt").offsetHeight);
^Dette sætter højden med DOM (Document Object Model), som er meget up-to-date, fremtidsvenlig kode. Man bør så vidt muligt forsøge at sætte attributter med:
.setAttribute("attributnavn","værdi")

Og også:
document.getElementById("banneriframe").style.height=document.getElementById("hovedfelt").offsetHeight;
^som sætter height som CSS også. Her kan dog ikke bruges setAttribute.
Avatar billede lone_a_p Praktikant
16. november 2007 - 02:17 #36
Det er som jeg vil have det nu. Har droppet alt det der med at loade reklamer alt efter hvor stort "det grå område"/sidens egentlige indhold er.

I stedet har jeg bare sat en fast højde på 600px til reklamer.

Der er ikke så meget vinding i at gøre en masse ud af at få det til at passe - og mange gange ville det ik passe alligevel pga. browsere osv.
Sådan her passer det hver gang ;)

Mange tak for interessen - vil du ik smide et svar, så får du nogle velfortjente point :)

Mvh Lone
Avatar billede w13 Novice
16. november 2007 - 14:35 #37
Okidoke! =)
Avatar billede w13 Novice
16. november 2007 - 14:55 #38
Mange tak!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester