webForumDet fria alternativet

Uppdatera ett annat fönster.

JavaScript

6 svar · 452 visningar · startad av Blomman

Medlem sedan aug. 200263 inlägg
Frågan#1

Hej!

Jag vill uppdatera ett fönster som jag inte har "tillgång" till..
Kan tänka mig att jag har ett fönster med javascript som i sin tur uppdaterar fönstret jag inte har "tillgång" till.
Testade lite men får inte till det.
Koden nedan "går" ju bara till fönstret.

Någon som har några tips?

    function AlarmRefresh(){
    window.location.reload("http://sida.html");
     }
   setInterval("AlarmRefresh()", 5000);
Medlem sedan aug. 20039 340 inlägg
#2

Det enda sättet att göra detta är att anropa window.open med ett ramnamn, om det finns några ramar i det andra fönstret.

<frame name="bla" />
eller
<iframe name="bla"></iframe>

window.open("http://sida.html", "bla");

Men är du helt säker på att du inte har en referens till fönstret? Om du öppnar en popup så har både popupen och moderfönstret varsin referns till varandra.
I moderfönstret kan du spara returvärdet från window.open():

mywin=window.open("popup.html", "_blank");
// mywin är din referens till fönstret

I popupen kan du använda windoow.opener för att komma åt moderfönstret.

Medlem sedan aug. 200263 inlägg
#3

Hej!

Nix finns inga frames i fönstret jag vill uppdatera..
Ja vill alltså att fönstret skall uppdateras med intervall.

Men borde inte detta fungera om jag förstått rätt?
E lite bakis i dag så hav översyn..:)

dsd

function AlarmRefresh(){
  var mywin;
  
  if (mywin) mywin.window.location.reload();
  else mywin = window.open("http://sida.html", "_blank")
  

}

setInterval("AlarmRefresh()", 5000);
Medlem sedan aug. 20039 340 inlägg
#4

Nej det borde det inte. mywin är en lokal variabel i funktionen, vilket gör att mywin tappar sitt värde så fort funktionen lämnas. Ett sätt att lösa detta är att lägga var mywin utanför funktionen, ett annat är att definiera en inre funktion, en metod som jag föredrar, eftersom man har allt på samma ställe.

function AlarmRefresh(){
  var mywin;

  setInterval(function(){
    if (mywin) mywin.window.location.reload();
    else mywin = window.open("http://sida.html", "_blank")
  }, 5000);  

}

Eftersom den inre funktionen är definierad inuti AlarmRefresh så kommer mywin alltid att vara tillgänglig för den.
Dock kan man diskutera det rätta i att tvinga besökaren att ha ett popupfönster öppet, och att det kommer att hamna överst om inte användaren har en popup-blockerare, men det är en annan historia.

Medlem sedan aug. 200263 inlägg
#5

Tack nitro2k!

Jag såg strax efter att variabeln var lokal i funktionen och la den globalt, jag fick till det ungefär som du skrev.

Dock så kvarstår problemet då jag kanske lite luddigt skrev tidigare att sidan tillhör en annan domän, dvs jag får Åtkomst nekad... :(

Kan inte komma på någon lösning hur man uppdaterar en sida på en annan domän.. :OO

Medlem sedan aug. 20039 340 inlägg
#6

Om sidorna tillhör olika domäner kan du inte anropa metoder som tillhör det objektet. men rpöva följande:

function AlarmRefresh(){
    window.open("http://sida.html", "alarmwin")
}

setInterval("AlarmRefresh()", 5000);

Detta ger popupen ett unikt namn, som du kan använda, men som inte bör ge åtkomst nekad.

Medlem sedan aug. 200263 inlägg
#7

Baahhh va enkelt! Tack igen, e lite koma i dag har inte kodat på 2år så man e lite rostig..:)

Kort och gott det vart en kod rad i slutändan efter så mycket junk-kod...:)

<script type="text/javascript">
window.setInterval("window.open('http://sida.html', 'alarmwin')" , 5000);
</script>
262 ms totalt · 4 externa anrop · v20260731065814-full.bd618308
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)