IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Alternative postMessage cross domain


Sujet :

jQuery

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2013
    Messages : 21
    Points : 22
    Points
    22
    Par défaut Alternative postMessage cross domain
    Bonjour,

    Je cherche une alternative à la fonction javascript postMessage().

    Voici le contexte :
    Sur le site d'un client, j'ai une page sur le sous-domaine "A". Celle-ci ouvre une fenêtre popup sur le sous-domaine "B". Le but étant de transmettre une information depuis la popup (B) vers la fenêtre appelante (A).

    Pour être plus clair, j'ai fait un exemple en local.
    Fenêtre appelante (A) (http://parent.popup)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    <!DOCTYPE html>
    <html>
    <head>
    	<title>parent</title>
    	<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    </head>
    <body>
    	<button onclick="Open()">Open</button>
    	<input type="text" id="result" />
     
    	<script type="text/javascript">
    		function Open() {
    			child = window.open("http://child.popup", "_blank", "height=600,width=600");
    		}
     
    		$(window).on("message", receiveMessage);
     
    		function receiveMessage(e)
    		{
    			//console.log(e.origin);
    			if (e.origin === "http://child.popup") {
    				$('#result').val(e.data);
    			}
    		}
    	</script>
    </body>
    </html>
    Popup (B) (http://child.popup)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    <!DOCTYPE html>
    <html>
    <head>
    	<title>child</title>
    	<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    </head>
    <body>
    	<button onclick="Go()">Go</button>
    	<input type="text" id="result" value="Hello World!" />
     
    	<script type="text/javascript">
    		function Go() {
    			opener.postMessage($('#result').val(), '*');
    		}
     
    		window.onbeforeunload = function(){
    			opener.postMessage($('#result').val(), '*');
    		};
    	</script>
    </body>
    </html>
    Cela fonctionne sur Chrome et sur Firefox mais pas sur Internet Explorer ...

    Sur ie11, cela fonctionne si je suis sur des domaines identiques. De plus la fonction postMessage() n'est pas reconnu sur les versions antérieures à ie10.

    Je cherche donc une alternative à postMessage() pour que cela fonctionne sur tous les navigateurs, auriez-vous des outils à me conseiller ?

    J'ai essayé ceci sans succès :



    Dans l'attente de vos conseils, je vous remercie par avance.

  2. #2
    Membre confirmé Avatar de 01001111
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2009
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 319
    Points : 509
    Points
    509
    Par défaut
    Peut-être cela fonctionnerait-il sur tous les navigateurs si au moment du window.open tu lançais un $.ajax au sein d'un setInterval, uniquement pour les cas où postMessage n'est pas supporté. Dans ce cas de figure, il faut que la page appelée sache que c'est le serveur qui a besoin de recevoir l'information et pas directement la page appelante, tu peux le spécifier avec une variable en get.
    Par la suite ta page appelée envoie sur le unload une information toujours en ajax au serveur, qui la retient dans une variable de session si tu es php par exemple.

    Certes c'est plus lourd côté client comme serveur, mais si ta requête est vite "zappée" par le serveur dans les cas où la réponse n'est pas encore fournie, ça reste peut-être raisonnable.
    0x4F

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2013
    Messages : 21
    Points : 22
    Points
    22
    Par défaut
    Bonsoir et merci de votre intérêt pour la question.

    Après avoir discuté avec mon client, nous avons décidé de supprimer la popup.
    Du coup, j'ai une page sur le sous-domaine A, un lien (au lieu d'un window.open) qui redirige le client vers la page sur le sous-domaine B. Enfin sur cette même page, un lien est présent et permet d'être redirigé vers la page du sous-domaine A avec les informations passées en get.

    Avec cette méthode, tout le traitement passe par le php au lieu de passer par javascript/ajax. Je suis donc sûr que cela fonctionne sur tous les navigateurs.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. javascript et cross domain
    Par razebitum dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 25/08/2007, 19h12
  2. [PHP-JS] Cross domaine et PHP
    Par intelcore dans le forum Langage
    Réponses: 5
    Dernier message: 06/07/2007, 14h00
  3. faire du cross domain
    Par Gomoz dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 19/10/2006, 15h22
  4. [Ajax] Cross domain et access denied
    Par Dinaïz dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 22/03/2006, 22h29
  5. cross-domain iframe!
    Par bumasoft dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/11/2005, 10h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo