Avatar billede jimpp Nybegynder
29. august 2006 - 12:55 Der er 22 kommentarer og
1 løsning

Div med iframe åbnes med link

Hej.

Jeg har en ide, som jeg godt kunne tænke mig at få realiseret.

<a href="page.asp?var=hej&var2=farvel">Klik mig</a>

Når det bliver klikke på linket, skal en div - indeholdende en iframe blive sat til visibel eller hva' det nu hedder. Iframen skal når div'en bliver vist hente "page.asp" med QS værdierne.

Samtiddigt vil jeg gerne have muligheden for at reloade "hovedsiden" når der feks bliver postet, eller hvis var bliver sat til noget andet - den værdi opsnupper jeg i ASP selvf. men skal bruge en lille kode stump der kan reloade hele skidtet :)

Hvordan gør jeg dette?

Kodeeksempler eller links til sider med "relevant ;)" indhold søges med lys og lygte.
Avatar billede thesurfer Nybegynder
29. august 2006 - 13:08 #1
Vis div og load url:

<script type="text/JavaScript">
function VisOgLoad(url)
{
document.getElementById("ifrm").src = url;
document.detElementById("indhold").display = "";
}
</script>


<a href="#" onclick="VisOgLoad('page.asp?var=hej&var2=farvel');return false;">Klik mig</a>
<br><br>

<div id="indhold" style="display:none">
<iframe id="ifrm" src=""></iframe>
</div>


Det med reload af "hovedsiden" forstod jeg ikke helt..
Avatar billede thesurfer Nybegynder
29. august 2006 - 13:09 #2
Rettelse:

<script type="text/JavaScript">
function VisOgLoad(url)
{
document.getElementById("ifrm").src = url;
document.detElementById("indhold").style.display = "";
}
</script>


<a href="#" onclick="VisOgLoad('page.asp?var=hej&var2=farvel');return false;">Klik mig</a>
<br><br>

<div id="indhold" style="display:none">
<iframe id="ifrm" src=""></iframe>
</div>
Avatar billede jimpp Nybegynder
29. august 2006 - 13:21 #3
Hvis Iframen bliver reloadet skal det hele reloades... så at sige - hvis det ikke giver mening må jeg lige hive fat i gyldendals den røde for inspiration :) - Kigger på det kode du har smækket ind nu
Avatar billede jimpp Nybegynder
29. august 2006 - 13:32 #4
Tilsyneladdende virker det ikke der sker ihverfald ikke ret meget :)
Avatar billede thesurfer Nybegynder
29. august 2006 - 13:33 #5
Nå.. jeg bliver jeg nødt til at teste koden.. :-)
Avatar billede thesurfer Nybegynder
29. august 2006 - 13:35 #6
Ahh... Jeg kom til at rykke "d" i stedet for "g" her:

document.detElementById("indhold").style.display = "";

Det hedder naturligvis "getElementById" og ikke "det..."..
Avatar billede thesurfer Nybegynder
29. august 2006 - 13:36 #7
Jeg kigger lige på det andet..
Avatar billede thesurfer Nybegynder
29. august 2006 - 13:38 #8
Jeg går ud fra, at du har adgang til kildekoden til filen "page.asp".

Vil siden i iframen på noget tidspunkt kun være "page.asp", dvs uden "?..." ?
Avatar billede jimpp Nybegynder
29. august 2006 - 14:21 #9
Nope, det vil den ikke
Avatar billede thesurfer Nybegynder
29. august 2006 - 14:36 #10
Ok.. kigger lige på det..
Avatar billede thesurfer Nybegynder
29. august 2006 - 14:52 #11
Hovedsiden (jeg har brugt "page.htm" i stedet for "page.asp"):

<script type="text/JavaScript">
function VisOgLoad(url)
{
document.getElementById("ifrm").src = url;
document.getElementById("indhold").style.display = "";
}
</script>

<a href="#" onclick="VisOgLoad('page.htm?var=hej&var2=farvel');return false;">load ?var=hej&var2=farvel</a>

<br><br>

<div id="indhold" style="display:none">
<iframe id="ifrm" src=""></iframe>
</div>


Iframen:

<html>
<head>
<title>din titel</title>

<script type="text/JavaScript" language="JavaScript">
loc = "" + window.location.search;
tid = "";
nu = parseInt(new Date().getTime());
ticks = 100; // hvor langt tid der må være i checket mellem første load og reload

if (loc.indexOf("tid") == -1)
{
    window.location.href = window.location.href + "&tid=" + new Date().getTime();
} else {
    tid = loc.substring(loc.indexOf("tid=") + "tid=".length);
    tid = parseInt(tid.substring(0,15));
   
    if (nu - tid > ticks) parent.location.reload(true);
}
</script>
</head>

<body>
<noscript>
Der bruges JavaScript på denne side. Hvis JavaScript er deaktiveret, fungerer visse funktioner ikke.
</noscript>


DIT INDHOLD HER

</body>
</html>
Avatar billede thesurfer Nybegynder
29. august 2006 - 15:00 #12
Hmm.. nu virker det ikke mere.. dammit.. kigger lige på det igen.. :-)
Avatar billede thesurfer Nybegynder
29. august 2006 - 15:14 #13
Problemet er i Mozilla FireFox..
Avatar billede thesurfer Nybegynder
29. august 2006 - 15:17 #14
Ideen er simpel:
- Siden loades
- Check om paramteren "tid" eksisterer i urlen
-- Hvis nej
--- iframens url sættes til nuværende url plus plus "&tid=" + tiden
-- ellers
--- find tiden
--- træk "tid" fra nuværende tid (hentes via JavaScript)
--- hvis forskellen er større end indholdet af variablen "ticks"
---- reload hovedsiden

Jeg håber at det er forståeligt.. :-)

Problemet i Mozilla FireFox er, at den iframen åbenbart får samme "tid"-værdi igen, når hovedsiden reloades.. derfor til "nu - tid" altid være større end "ticks", hvilket betyder at hovedsiden altid reloades..

Jeg ser lige om jeg kan overskrift iframens url..
Avatar billede thesurfer Nybegynder
29. august 2006 - 15:25 #15
Af en eller anden grund, vil FireFox ikke gøre det ordentligt..

Den tildeler muligvis iframe samme tid-værdi, som den havde tidligere..
Dvs, forskellen mellem nu-værdi og tid-værdi hele tiden stiger.

Jeg har sat den til at reloade, hvis forskellen er større end 5000.

I indlægget 29/08-2006 14:52:06 er den dog sat til 100.

Jeg har prøvet med følgende kode i hovedsiden, men det virker stadigvæk ikke i FireFox:

<html>
<head>
<title>this is div_iframe</title>
<script type="text/JavaScript">
function VisOgLoad(url)
{
document.getElementById("ifrm").src = url;
document.getElementById("indhold").style.display = "";
}

function overskriv()
{
document.getElementById("ifrm").src = "about:blank";
alert(document.getElementById("ifrm").src = "about:blank");
}
</script>
</head>
<body onload="overskriv()">

<a href="#" onclick="VisOgLoad('page.htm?var=hej&var2=farvel');return false;">load ?var=hej&var2=farvel</a>

<br><br>

<div id="indhold" style="display:none">
<iframe id="ifrm" src=""></iframe>
</div>

</body>
</html>

Den burde skrive "about:blank" i en alertbox, men det gør den kun første gang..
Avatar billede thesurfer Nybegynder
29. august 2006 - 15:32 #16
Denne kode virker fint i Opera v9.01 og Internet Explorer 6 SP2:

- Hovedsiden

<html>
<head>
<title>this is div_iframe</title>
<script type="text/JavaScript">
function VisOgLoad(url)
{
document.getElementById("ifrm").src = url;
document.getElementById("indhold").style.display = "";
}

</script>
</head>
<body>

<a href="#" onclick="VisOgLoad('page.htm?var=hej&var2=farvel');return false;">load ?var=hej&var2=farvel</a>

<br><br>

<div id="indhold" style="display:none">
<iframe id="ifrm" src=""></iframe>
</div>

</body>
</html>

- Iframen

<html>
<head>
<title>din titel</title>

<script type="text/JavaScript" language="JavaScript">
loc = "" + window.location.search;
tid = "";
nu = parseInt(new Date().getTime());
ticks = 5000; // hvor langt tid der må være i checket mellem første load og reload

if (loc.indexOf("tid") == -1)
{
    window.location.href = window.location.href + "&tid=" + new Date().getTime();
} else {
    tid = loc.substring(loc.indexOf("tid=") + "tid=".length);
    tid = parseInt(tid.substring(0,15));
   
    if (nu - tid > ticks) parent.location.reload(true);
}
</script>
</head>

<body>
<noscript>
Der bruges JavaScript på denne side. Hvis JavaScript er deaktiveret, fungerer visse funktioner ikke.
</noscript>


DIT INDHOLD HER

</body>
</html>


Jeg ved ikke hvordan man kan få det til at fungerer i FireFox.. den looper konstant efter først reload af hovedsiden, fra iframen..
Avatar billede thesurfer Nybegynder
29. august 2006 - 15:36 #17
Det kan være at roenving, olebole eller erikjacobsen kan fortælle hvor Mozilla FireFox gør det.. jeg har ingen anelse..
Avatar billede jimpp Nybegynder
29. august 2006 - 15:55 #18
Mange tak kom endeligt med et svar
Avatar billede thesurfer Nybegynder
29. august 2006 - 16:14 #19
Ok :-)
Avatar billede thesurfer Nybegynder
29. august 2006 - 16:21 #20
Jeg har tilføjet et browser-check (baseret på UserAgent), der IKKE afvikler koden, hvis browseren-strengen indeholder "firefox".

Her er den nye kode:

<html>
<head>
<title>din titel</title>

<script type="text/JavaScript" language="JavaScript">
ua = navigator.userAgent.toLowerCase();
if (ua.indexOf("firefox") == -1)
    {
    loc = "" + window.location.search;
    tid = "";
    nu = parseInt(new Date().getTime());
    ticks = 5000; // hvor langt tid der må være i checket mellem første load og reload

    if (loc.indexOf("tid") == -1)
    {
        window.location.href = window.location.href + "&tid=" + new Date().getTime();
    } else {
        tid = loc.substring(loc.indexOf("tid=") + "tid=".length);
        tid = parseInt(tid.substring(0,15));
       
        if (nu - tid > ticks) parent.location.reload(true);
    }
}

function check_ua()
{
    if (ua.indexOf("firefox") > -1)
    {
        besked = "<i>Et script, der for&aring;rsager en endelig loop i Mozilla Firefox, er blevet deaktiveret.</i>";
        document.getElementById("besked").innerHTML = besked;
    }
}
</script>
</head>

<body onload="check_ua()">
<noscript>
Der bruges JavaScript på denne side. Hvis JavaScript er deaktiveret, fungerer visse funktioner ikke.
</noscript>
<div id="besked"></div>


DIT INDHOLD HER

</body>
</html>
Avatar billede thesurfer Nybegynder
29. august 2006 - 16:22 #21
Rettelse:

<html>
<head>
<title>din titel</title>

<script type="text/JavaScript" language="JavaScript">
ua = navigator.userAgent.toLowerCase();
if (ua.indexOf("firefox") == -1)
    {
    loc = "" + window.location.search;
    tid = "";
    nu = parseInt(new Date().getTime());
    ticks = 5000; // hvor langt tid der må være i checket mellem første load og reload

    if (loc.indexOf("tid") == -1)
    {
        window.location.href = window.location.href + "&tid=" + new Date().getTime();
    } else {
        tid = loc.substring(loc.indexOf("tid=") + "tid=".length);
        tid = parseInt(tid.substring(0,15));
       
        if (nu - tid > ticks) parent.location.reload(true);
    }
}

function check_ua()
{
    if (ua.indexOf("firefox") > -1)
    {
        besked = "<i>Et script, der for&aring;rsager en uendelig loop i Mozilla Firefox, er blevet deaktiveret.</i>";
        document.getElementById("besked").innerHTML = besked;
    }
}
</script>
</head>

<body onload="check_ua()">
<noscript>
Der bruges JavaScript på denne side. Hvis JavaScript er deaktiveret, fungerer visse funktioner ikke.
</noscript>
<div id="besked"></div>


DIT INDHOLD HER

</body>
</html>
Avatar billede jimpp Nybegynder
29. august 2006 - 16:27 #22
Superb!
Avatar billede thesurfer Nybegynder
29. august 2006 - 16:31 #23
Takker for points :-)
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