Voici la méthode qui est utilisée dans les modules Commerce SagePay et Commerce Paypoint Drupal qui se compare essentiellement document.location.href
à l'ancienne valeur en chargeant d'abord sa propre iframe, puis une externe.
Donc, fondamentalement, l'idée est de charger la page vierge comme un espace réservé avec son propre code JS et un formulaire caché. Ensuite, le code JS parent soumettra ce formulaire caché où il #action
pointe vers l'iframe externe. Une fois la redirection / soumission effectuée, le code JS qui est toujours en cours d'exécution sur cette page peut suivre vos document.location.href
changements de valeur.
Voici un exemple de JS utilisé dans iframe:
;(function($) {
Drupal.behaviors.commercePayPointIFrame = {
attach: function (context, settings) {
if (top.location != location) {
$('html').hide();
top.location.href = document.location.href;
}
}
}
})(jQuery);
Et voici 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 destination vierge temporaire, vous devez inclure le formulaire qui redirigera vers la page externe.
src
propriété changera-t-elle lorsqu'un lien dans l'iframe est cliqué? Je ne suis pas sûr de cela - si je devais deviner, je dirais "non". Il existe des moyens de surveiller les propriétés (dans Firefox au moins AFAIK) mais je ne suis pas sûr que cela soit utile dans ce cas.