Avatar billede Ulrich Seniormester
22. oktober 2017 - 20:49 Der er 11 kommentarer og
1 løsning

iframe tilpasse height efter indhold.

Har en side, nyheder.asp som indeholder nyheder. Den er dynamisk, dvs der er mellem 1 og 20 linjer (nyheder) skiftende hver dag.

nyheder.asp side vise på en anden side info.asp i en iframe.
<iframe frameborder="0" src="nyheder.asp" width="400"></iframe>

For ikke at have fast højde på iframe på info.asp siden, så der kan opstå scroll bar, vil jeg gerne have at højde sættes automatisk efter indhold på nyheder.asp siden.

info.asp siden foretager auto update hver 10 minut.
De to sider ligger på hver sit domæne, men hvis det er nemmere, kan de godt være på samme domæne.
Avatar billede Slater Ekspert
22. oktober 2017 - 20:57 #1
Det kan du ikke. En iframe kan ikke have højde efter indholdet, i hvert fald ikke uden noget kompliceret script, som har det med at gå i stykker responsivt eller ved klient-zoom alligevel.

Jeg vil anbefale dig helt at skrotte iframes, og sætte indholdet ind med Javascript i stedet. Det fungerer meget bedre, og højden kan sættes helt dynamisk. Dog skal du så huske, at CSS på modtagersiden pludselig har effekt på den inkluderede side, modsat før.
Avatar billede cht22 Professor
22. oktober 2017 - 21:02 #2
Så tror jeg ikke det er iframe du skal bruge. Måske kan div med id bruges:

og så kan du bruge java script:

document.getElementById("text").innerHTML = "dine nyheder";

Du kan godt undgå scrolbar på iframe, men det er nok ikke det du vil.

https://www.w3schools.com/tags/att_iframe_scrolling.asp

Eller også skal du finde en helt tredje mulighed.
Avatar billede Ulrich Seniormester
22. oktober 2017 - 21:48 #3
Det er en info skærm, så der er ikke bruger input der zoomer eller andet, der er auto update på som det eneste.

Jeg dropper iframe.
Er der nogen der kan hjælpe med JS eller Jq kode for de to sider?
nyheder.asp som indeholder linjer fra 1 til fx 20 og som skal vises i felt på anden side.
info.asp som i et felt skal vise indholdet af nyheder.asp.
Avatar billede cht22 Professor
23. oktober 2017 - 07:16 #4
Det kan gøres med ajax således:

Indsæt dette mellem <head> og </head>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
  setInterval(function(){
        $.get("nyheder.asp", function(data, status){
            document.getElementById("nyheder").innerHTML = data;
        });
    }, 300000);
});
</script>


Her er tiden der skal gå mellem at der nyhederne hentes sat til 5 minutter. Du kan evt. ændre det ved at ændre de 300000 millisekunder.

Dette indsætte imellem <body> og </body>

<div id=nyheder>Visning af nyheder</div>
Avatar billede cht22 Professor
23. oktober 2017 - 11:43 #5
Der skal nok lige ændres lidt ellers henter den først nyhederne efter 5 minutter
Avatar billede cht22 Professor
23. oktober 2017 - 12:47 #6
Det kan gøres sådan her:

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$.get("nyheder.php", function(data, status){
  document.getElementById("nyheder").innerHTML = data;
});
$(document).ready(function(){
  setInterval(function(){
        $.get("nyheder.php", function(data, status){
            document.getElementById("nyheder").innerHTML = data;
        });
    }, 300000);
});
</script>
</head>
<body>
<div id=nyheder>Visning af nyheder</div>
</body>
</html>
Avatar billede cht22 Professor
23. oktober 2017 - 13:58 #7
Det bør være sådan her (så er der taget højde for hvis siden er længere tid om at loade:

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
  $.get("nyheder.php", function(data, status){
    document.getElementById("nyheder").innerHTML = data;
  });
});
$(document).ready(function(){
  setInterval(function(){
        $.get("nyheder.php", function(data, status){
            document.getElementById("nyheder").innerHTML = data;
        });
    }, 300000);
});
</script>
</head>
<body>
<div id=nyheder>Visning af nyheder</div>
</body>
</html>

Navnet på siden nyheder.php skal du selvfølgelig ændre til nyheder.asp hvis det er det siden du henter fra hedder.
Avatar billede Ulrich Seniormester
23. oktober 2017 - 18:51 #8
HELT FANTASTISK !!

Det virker tak for det.
Har dog et spørgsmål mere?
Hvis det er en side på et andet domæne, kan det så lade sig gøre?
Avatar billede Slater Ekspert
23. oktober 2017 - 19:57 #9
Ja, men det kræver at den ressource du henter data fra har en CORS-header.

Er det dit eget domæne?
Avatar billede Ulrich Seniormester
23. oktober 2017 - 20:14 #10
Ja begge er mit eget - altså ikke noget jeg selv host'er.
De ligger ved www.unoeuro.com/ begge.
Avatar billede Ulrich Seniormester
26. oktober 2017 - 20:29 #11
Slater, kan jeg gøre noget for at få det til at virke på to domæner?
Avatar billede Ulrich Seniormester
26. oktober 2017 - 23:39 #12
Jeg kører det på samme domæne, så virker det.
Et andet spørgsmål som jeg vil høre om i ved svar på.
Jeg bruger følgende:
http://www.dynamicdrive.com/dynamicindex2/cmarquee2.htm
og i 'Step 2' har jeg følgende:
<!--YOUR SCROLL CONTENT HERE-->
<div id=nyheder></div>
<!--YOUR SCROLL CONTENT HERE-->

Det virker faktisk, bortset fra at når tekst ruller helt i top starter den forfra, dvs den kommer aldrig til at vise det nederste tekst.
Hvis der er fx 10 linjer og der er plads til 5, ruller den op til toppen og 5 er synlige, så clear den feltet og starter den forfra i bunder igen.
Lidt som om det kun er Chrome og ikke i Explore.

Nogen der ved hvorfor?
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

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