Cookie op ander domein
Situatie
Enquêtes kunnen d.m.v. een regel JS aan websites toegevoegd worden. Deze regel is gewoon includen van een JS mbv src. Deze JS staat op een extern domein: enquete.domein.nl. Bij het openen van die websites wordt de JS gemaakt; aan de hand van gegevens uit de DB wordt er óf niets getoond (enquête verlopen, aanroep vanaf verkeerd domein, enquête reeds ingevuld) óf een functie getoond. Deze functie maakt een <div> op de pagina.
De div fade-in en heeft als inhoud een iframe met als src http://enquete.domein.nl/popup.php. Qua tekst moet je bedenken dat er staat: "Wilt u meedoen aan de enquete? Ja / Nee". Natuurlijk zijn Ja en Nee hyperlinks.
Als je op Ja klikt wordt de enquête geopend. Na het doorlopen van de enquête wordt er een cookie gezet (dus op het domein enquete.domein.nl) dat de enquête ingevuld is. Deze cookie wordt weer gecontroleerd bij het aanmaken van de eerder besproken JS.
Als de gebruiker op nee klikt moet de div weggaan, maar ook een cookie plaatsen op enquete.domein.nl zodat bij een volgend bezoek niet dezelfde pop-up alsnog wordt weergegeven.
Probleem
De actie bij 'Ja' is geen probleem. De actie bij 'Nee' daarentegen wel. Ik heb het op verschillende manieren geprobeerd:
- Bij het klikken op 'Nee' het uitvoeren van JS op de website om eerst de cookie te zetten en dan te sluiten, maar dan wordt de cookie, vanzelfsprekend, op het domein van de website gezet en heb ik er niets aan. (allee in deze situatie stond de keuze Ja/Nee niet in de iframe, maar alleen in de div.)
- Bij de 'Nee', welke in het iframe staat, daar de code voor de cookie uitvoeren. Dat werkt in principe wel, omdat de source van de iframe het domein enquete.domein.nl is staat die cookie goed. Alleen heb ik vanuit de JS in de iframe geen toegang tot de JS van de website. M.a.w., ik kan de div niet sluiten. Dan heb je wle mooi Nee geklikt, maar heb ik er niets aan.
Dus bedacht ik me dat ik het wellicht met AJAX kan oplossen. Dus ik bouw snel een functie om, zodra je op Nee klikt, eerst een AJAX-request te doen naar enquete.domein.nl om de cookie te zetten en daarna op de website de div te sluiten.
Iedereen die al meer dan 5 minuten met AJAX heeft gewerkt weet dus al waar ik in al mijn enthousiasme niet aan gedacht heb: de AJAX-request gaat naar een ander domein en dat mag niet.
En nu kom ik bij mijn huidige situatie. Ik laat de AJAX-request nu naar een bestand gaan die op hetzelfde domein als de website staat en dat bestand laat ik met fopen enzo het PHP-script inlezen wat de cookie moet zetten.
Idee lijkt goed, maar er is altijd een maar. De scripts werken, maar de cookie wordt niet gezet. En ik denk omdat het komt omdat de browser niet de request voor dat bestand doet, maar het PHP-bestand op de website.
De vraag [hèhè ;)]
Weet iemand hoe dit alles op te lossen c.q. te omzeilen is. Ik wil dus zeg maar een iframe in een div sluiten op de ene website en een cookie maken op de andere website.
Of ik wil die cookie kunnen zetten via die AJAX-request, maar dan wel op het domein enquete.domein.nl.
Zo... :) Heeft iedereen het kunnen volgen? :)
Enquêtes kunnen d.m.v. een regel JS aan websites toegevoegd worden. Deze regel is gewoon includen van een JS mbv src. Deze JS staat op een extern domein: enquete.domein.nl. Bij het openen van die websites wordt de JS gemaakt; aan de hand van gegevens uit de DB wordt er óf niets getoond (enquête verlopen, aanroep vanaf verkeerd domein, enquête reeds ingevuld) óf een functie getoond. Deze functie maakt een <div> op de pagina.
De div fade-in en heeft als inhoud een iframe met als src http://enquete.domein.nl/popup.php. Qua tekst moet je bedenken dat er staat: "Wilt u meedoen aan de enquete? Ja / Nee". Natuurlijk zijn Ja en Nee hyperlinks.
Als je op Ja klikt wordt de enquête geopend. Na het doorlopen van de enquête wordt er een cookie gezet (dus op het domein enquete.domein.nl) dat de enquête ingevuld is. Deze cookie wordt weer gecontroleerd bij het aanmaken van de eerder besproken JS.
Als de gebruiker op nee klikt moet de div weggaan, maar ook een cookie plaatsen op enquete.domein.nl zodat bij een volgend bezoek niet dezelfde pop-up alsnog wordt weergegeven.
Probleem
De actie bij 'Ja' is geen probleem. De actie bij 'Nee' daarentegen wel. Ik heb het op verschillende manieren geprobeerd:
- Bij het klikken op 'Nee' het uitvoeren van JS op de website om eerst de cookie te zetten en dan te sluiten, maar dan wordt de cookie, vanzelfsprekend, op het domein van de website gezet en heb ik er niets aan. (allee in deze situatie stond de keuze Ja/Nee niet in de iframe, maar alleen in de div.)
- Bij de 'Nee', welke in het iframe staat, daar de code voor de cookie uitvoeren. Dat werkt in principe wel, omdat de source van de iframe het domein enquete.domein.nl is staat die cookie goed. Alleen heb ik vanuit de JS in de iframe geen toegang tot de JS van de website. M.a.w., ik kan de div niet sluiten. Dan heb je wle mooi Nee geklikt, maar heb ik er niets aan.
Dus bedacht ik me dat ik het wellicht met AJAX kan oplossen. Dus ik bouw snel een functie om, zodra je op Nee klikt, eerst een AJAX-request te doen naar enquete.domein.nl om de cookie te zetten en daarna op de website de div te sluiten.
Iedereen die al meer dan 5 minuten met AJAX heeft gewerkt weet dus al waar ik in al mijn enthousiasme niet aan gedacht heb: de AJAX-request gaat naar een ander domein en dat mag niet.
En nu kom ik bij mijn huidige situatie. Ik laat de AJAX-request nu naar een bestand gaan die op hetzelfde domein als de website staat en dat bestand laat ik met fopen enzo het PHP-script inlezen wat de cookie moet zetten.
Idee lijkt goed, maar er is altijd een maar. De scripts werken, maar de cookie wordt niet gezet. En ik denk omdat het komt omdat de browser niet de request voor dat bestand doet, maar het PHP-bestand op de website.
De vraag [hèhè ;)]
Weet iemand hoe dit alles op te lossen c.q. te omzeilen is. Ik wil dus zeg maar een iframe in een div sluiten op de ene website en een cookie maken op de andere website.
Of ik wil die cookie kunnen zetten via die AJAX-request, maar dan wel op het domein enquete.domein.nl.
Zo... :) Heeft iedereen het kunnen volgen? :)
Gesponsorde koppelingen:
Lange post.. Hmm.. ikzelf zou de COOKIE automatisch op nee zetten nog VOOR je ergens op hebt geklikt en als je op ja klikt deze veranderen.
Misschien is dit een oplossing (natuurlijk niet ideaal, maar het doet het wel..)
Misschien is dit een oplossing (natuurlijk niet ideaal, maar het doet het wel..)
Nee, dat is geen oplossing, want in eerste instantie is er geen cookie. Die wordt aangemaakt n.a.v. de keuze van de gebruiker.
Vooralsnog is het de bedoeling dat de als je niets kiest de pop-up de volgende keer wel te zien moet zijn...
Maar wellicht is het idd een optie. Maar dan maken we de keuze om de pop-up maar een keer te zien. Dus, JS aanmaken is het aanmaken van de cookie en dan Nee kiezen is is alleen sluiten.
Een optie die ik in mijn achterhoofd hou. Voor als ik er echt niet uit kom.. :)
Vooralsnog is het de bedoeling dat de als je niets kiest de pop-up de volgende keer wel te zien moet zijn...
Maar wellicht is het idd een optie. Maar dan maken we de keuze om de pop-up maar een keer te zien. Dus, JS aanmaken is het aanmaken van de cookie en dan Nee kiezen is is alleen sluiten.
Een optie die ik in mijn achterhoofd hou. Voor als ik er echt niet uit kom.. :)
*Bump*
(ff allemaal reageren als ik voetbal ben kijken... )
(ff allemaal reageren als ik voetbal ben kijken... )
*Bump*
(nou boys, reageer dan ook eens op mijn vragen)
(nou boys, reageer dan ook eens op mijn vragen)
wel, neem hem dan net omgekeerd...
zet standaard een cookie met als inhoud ja.
komt de popup altijd tenzij op nee geklikt
zet standaard een cookie met als inhoud ja.
komt de popup altijd tenzij op nee geklikt
Dat is nu dus het geval. Het probleem is het op 'Nee' zetten van de cookie.
Dat gaat dus niet zonder meer met een iframe als wel met een JS op de pagina. En ook die Ajax-request werkt niet omdat het cookie niet geaccepteerd wordt.
Dat gaat dus niet zonder meer met een iframe als wel met een JS op de pagina. En ook die Ajax-request werkt niet omdat het cookie niet geaccepteerd wordt.
*doet nog eens een poging*
XHR wil inderdaad niet cross-domain, net als je cookies en je toegang tot je iframe.
Maar de communicatie met dat frame is dus eigenlijk het probleem? Er is een oplossing om daar omheen te komen. Wat je wel moet weten is de huidige url van de site waar het iframe op geopend wordt.
Op de enquete-site die de nee-link bevat, en die dus eigenlijk zijn omliggende iframe zou moeten sluiten verwijs je naar de parent (site x) en verander je de url naar de huidige URL* plus een anchor, bijv. #enquete-sluiten.
Op de site waar je vraagt of er een enquete afgenomen mag worden (site x) controleer je om de zoveel tijd (bijv. 200 miliseconden) de window.location.hash is veranderd. Is er op 'nee' gedrukt, dan zou de hash #enquete-sluiten moeten zijn, en kan je actie ondernemen (en de interval stoppen uiteraard)
Voorbeeldje: site x
(in mijn testje localhost)
En enquete.domein.nl
(in mijn geval mirror.ikhoefgeen.nl)
Maar de communicatie met dat frame is dus eigenlijk het probleem? Er is een oplossing om daar omheen te komen. Wat je wel moet weten is de huidige url van de site waar het iframe op geopend wordt.
Op de enquete-site die de nee-link bevat, en die dus eigenlijk zijn omliggende iframe zou moeten sluiten verwijs je naar de parent (site x) en verander je de url naar de huidige URL* plus een anchor, bijv. #enquete-sluiten.
Op de site waar je vraagt of er een enquete afgenomen mag worden (site x) controleer je om de zoveel tijd (bijv. 200 miliseconden) de window.location.hash is veranderd. Is er op 'nee' gedrukt, dan zou de hash #enquete-sluiten moeten zijn, en kan je actie ondernemen (en de interval stoppen uiteraard)
Voorbeeldje: site x
(in mijn testje localhost)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Page Title</title>
<script type="text/javascript" charset="utf-8">
var interval;
interval = setInterval(function() {
if(window.location.hash == '#hoi') {
alert('Goed zo :)');
clearInterval(interval);
}
}, 200);
</script>
</head>
<body id="">
<iframe name="iframe" src="http://mirror.ikhoefgeen.nl/testje.html"></iframe>
</body>
</html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Page Title</title>
<script type="text/javascript" charset="utf-8">
var interval;
interval = setInterval(function() {
if(window.location.hash == '#hoi') {
alert('Goed zo :)');
clearInterval(interval);
}
}, 200);
</script>
</head>
<body id="">
<iframe name="iframe" src="http://mirror.ikhoefgeen.nl/testje.html"></iframe>
</body>
</html>
En enquete.domein.nl
(in mijn geval mirror.ikhoefgeen.nl)



