"aagesen" <aagesen.news@kandu.dk> writes:
> Kan nogen hjælpe mig med noget JavaScript-kode, der automatisk refresher
> en URL i en Iframe og samtidig laver en alert til brugeren såfremt
> indholdet af denne URL er ændret (læs: dokumentet er blevet længere
> )siden sidste refresh.
Det kan være svært/umuligt, afhængigt at browserens opsætning. Hvis
sider er på en anden server, så beskytter browseren måske mod "cross
site scripting", altså du får en "permission denied" når du prøver
at pille ved indholdet af framen.
"Blevet længere" er svært at tjekke (jeg ved ikke lige hvordan, med
mindre man måler det i pixels), men det kan være man kan se hvornår
siden sidst er opdateret. Det kræver selvfølgelig at siden ikke
er dynamisk genereret, så lastModified-egenskaben giver mening.
Ellers kunne man som sagt tjekke på document.body.offsetHeight
i stedet for document.lastModified.
Prøv følgende:
---
var egenskab;
var counter=0;
function init() {
egenskab=window.frames["ram1"].contentWindow.document.lastModified;
setInterval(update,2000);
}
function update() {
window.frames["ram1"].src =
"
http://server.dk/side.html"+"?"+(counter++); // tvinger reload.
setTimeout(tjek,500); // vent til siden er loadet! Forøg 500 hvis ej nok
}
function tjek() {
var nyegenskab = window.frames["ram1"].contentWindow.document.lastModified;
if (egenskab != nyegenskab){
egenskab=nyegenskab;
alert("SIDEN ER ÆNDRET!");
}
}
---
Forklaring:
Funktionen "init" gemmer "lastModified"-egenskaben for dokumentet i framen.
Der SKAL være et dokument i framen når init kaldes.
Der startes en timer der opdaterer framen hvert andet sekund (2000
millisekunder).
Funkitonen "update" opdaterer iframen ved at ændre dets
location.href. Der tilføjes et tal efter urlen for at undgå at den
tages fra cachen (hvis du kan undgå caching, så kan tælleren
undværes).
Den venter så et halvt sekund (500 millisekunder) med at tjekke om
indholder er opdateret, for at give siden tid til at loade. Sæt
tiden op hvis serveren er langosm eller siden stor.
Funktionen "tjek" sammenligner det nye dokuments "lastModified" med
den gemte, og hvis de er forskellige, så laver den en alert (og
gemmer den nye værdi).
Det virker som sagt ikke i nyere browsere (i hvert fald ikke i IE6)
hvis iframens indhold er fra en anden server end hovedsidens, så
man kan kun bruge det til at holde øje med dine egne sider (eller
du kan bruge den til andres, hvis du piler i din egen IE's opsætning).
/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
'Faith without judgement merely degrades the spirit divine.'