Toon posts:

javascript functie andere pagina aanroepen

Pagina: 1
Acties:
  • 138 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Vanuit een pagina wordt een popup geopend.
Deze popup wordt gesloten dmv een knop. Als er op de knop wordt gedrukt, dan wordt tevens dmv
code:
1
opener.refresh()


de andere pagine gerefreshed. Dit werkt allemaal goed.

Alleen als ik in de popup een keer zichzelf aanroep (om een formulier te verwerken <form action""> dan werkt de code

opener.refresh()

niet meer. dit komt omdat denk ik de bronpagina niet meer goed is, omdat de popup een keer zichzelf heeft aangeroepen.

Is er een oplossing om wel de functie van de andere pagina te kunnen benaderen.

Verwijderd

Is die refresh() functie een zelf geschreven functie?

Anyway, ik doe meestal dit (wat eigenlijk altijd werkt):
code:
1
window.opener.location.reload();

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 28-11 08:35

curry684

left part of the evil twins

Na de post is de caller inderdaad niet meer valid. Ik voorzie zware XSS issues als dat niet zo zou zijn eigenlijk.

Je kunt met Ajax gewoon forms posten zonder al teveel moeite, dan heb je dit probleem niet (of gewoon geen popups gebruiken zoals de rest van de verlichte wereld).

Professionele website nodig?


  • dominic
  • Registratie: Juli 2000
  • Laatst online: 27-11 20:08

dominic

will code for food

curry684 schreef op donderdag 04 januari 2007 @ 21:48:
Na de post is de caller inderdaad niet meer valid. Ik voorzie zware XSS issues als dat niet zo zou zijn eigenlijk.

Je kunt met Ajax gewoon forms posten zonder al teveel moeite, dan heb je dit probleem niet (of gewoon geen popups gebruiken zoals de rest van de verlichte wereld).
Toch vreemd. In een applicatie waarbij in een popup er een online betaling afgehandeld wordt, en er ook gepost wordt, eindig ik vrolijk binnen de popup met een window.opener.location.href='blaat' en dit werkt prima.

Download my music on SoundCloud


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 28-11 08:35

curry684

left part of the evil twins

Geen idee hoe ze het doen, maar als de gebruiker binnen het popup window naar andere sites mag browsen, al of niet op aangeven van de site zelf, is het alleszins niet de bedoeling dat die nieuwe pagina zomaar even het hele DOM van de aanroepende pagina mag benaderen en random formpjes submitten daar en zo binnen de context van de huidige user.

Professionele website nodig?


Verwijderd

Zolang je geen rare dingen in de popup doet (zoals de eigen site verlaten), zou je gewoon 'window.opener' moeten kunnen gebruiken.

  • dominic
  • Registratie: Juli 2000
  • Laatst online: 27-11 20:08

dominic

will code for food

curry684 schreef op donderdag 04 januari 2007 @ 22:33:
Geen idee hoe ze het doen, maar als de gebruiker binnen het popup window naar andere sites mag browsen, al of niet op aangeven van de site zelf, is het alleszins niet de bedoeling dat die nieuwe pagina zomaar even het hele DOM van de aanroepende pagina mag benaderen en random formpjes submitten daar en zo binnen de context van de huidige user.
Nu heb je het weer over cross-domain, en dat kan javascript tegenhouden ja.

Download my music on SoundCloud


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 18:11

crisp

Devver

Pixelated

De eenvoudigste manier om dit op te lossen is door in je popup een frameset te gebruiken. Binnen je frame(s) kan je dan navigeren wat je wilt, maar je frameset houdt een referentie naar je opener. Vanuit een framed pagina kan je dan altijd 'parent.opener' gebruiken.

Een andere manier is om vanuit je opener te 'pollen' naar je popup:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function poll()
{
    if (foo && !foo.closed)
    {
        try()
        {
            foo.opener = self;
        }
        catch(e) {}
    }
}

var foo = window.open('foo.html');
setInterval(poll, 100);

[ Voor 17% gewijzigd door crisp op 05-01-2007 10:43 ]

Intentionally left blank


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 28-11 08:35

curry684

left part of the evil twins

dominic schreef op vrijdag 05 januari 2007 @ 10:14:
[...]

Nu heb je het weer over cross-domain, en dat kan javascript tegenhouden ja.
Punt is dat JS niet weet wanneer je cross-domain bezig bent. Als jij van www.xs4all.nl/~pietje naar www.xs4all.nl/~klaasje surft ben je technisch *niet* crossdomain bezig, maar je komt wel bij een potentieel malevolente site. De enige correcte actie is dus om de references te invalideren bij iedere page reload imo.

Ik weet niet 100% zeker hoe browsers ermee om gaan, maar ik zie stapels security risks als ze het niet strak dichttimmeren. Ik zou net als crisp voor de framesoplossing gaan in beginsel, of liever nog Ajax, of liever nog ranzige popups omzeilen.

[ Voor 3% gewijzigd door curry684 op 05-01-2007 10:51 ]

Professionele website nodig?


  • dominic
  • Registratie: Juli 2000
  • Laatst online: 27-11 20:08

dominic

will code for food

crisp schreef op vrijdag 05 januari 2007 @ 10:42:
De eenvoudigste manier om dit op te lossen is door in je popup een frameset te gebruiken. Binnen je frame(s) kan je dan navigeren wat je wilt, maar je frameset houdt een referentie naar je opener. Vanuit een framed pagina kan je dan altijd 'parent.opener' gebruiken.

Een andere manier is om vanuit je opener te 'pollen' naar je popup:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function poll()
{
    if (foo && !foo.closed)
    {
        try()
        {
            foo.opener = self;
        }
        catch(e) {}
    }
}

var foo = window.open('foo.html');
setInterval(poll, 100);
heheh da's wel een leuke truuk :P

Download my music on SoundCloud

Pagina: 1