Voici la méthode qui est utilisée dans Commerce SagePay et en Commerce Paypoint Modules Drupal qui comparent essentiellement document.location.href
avec l'ancienne valeur en chargeant d'abord sa propre iframe, puis une iframe externe.
En gros, l'idée est de charger la page blanche comme un espace réservé avec son propre code JS et un formulaire caché. Ensuite, le code JS parent soumettra ce formulaire caché où son #action
pointe vers l'iframe externe. Une fois que la redirection/soumission a lieu, le code JS qui est toujours en cours d'exécution sur cette page peut suivre votre document.location.href
les changements de valeur.
Voici un exemple de JS utilisé dans une iframe :
;(function($) {
Drupal.behaviors.commercePayPointIFrame = {
attach: function (context, settings) {
if (top.location != location) {
$('html').hide();
top.location.href = document.location.href;
}
}
}
})(jQuery);
Et voici le JS utilisé dans la page parent :
;(function($) {
/**
* Automatically submit the hidden form that points to the iframe.
*/
Drupal.behaviors.commercePayPoint = {
attach: function (context, settings) {
$('div.payment-redirect-form form', context).submit();
$('div.payment-redirect-form #edit-submit', context).hide();
$('div.payment-redirect-form .checkout-help', context).hide();
}
}
})(jQuery);
Ensuite, dans la page de renvoi temporaire vierge, vous devez inclure le formulaire qui redirigera vers la page externe.
5 votes
Est-ce que le
src
change-t-elle lorsqu'on clique sur un lien dans l'iframe ? Je ne suis pas sûr de cela - si je devais deviner, je dirais "non". Il y a sont Il existe des moyens de contrôler les propriétés (dans Firefox au moins AFAIK) mais je ne suis pas sûr que cela soit utile dans ce cas.0 votes
J'essaie de mettre en œuvre quelque chose de ce genre, et je peux confirmer que la fonction
src
dans le DOM fait no changement dans les dernières versions de FireFox ou de Safari. La réponse de @Michiel ci-dessous est la meilleure que j'ai pu obtenir jusqu'à présent.