Вот метод, который используется в Commerce SagePay и в Commerce Paypoint Drupal, который в основном сравнивает document.location.href
со старым значением, сначала загружая его собственный iframe, затем внешний один.
Таким образом, основная идея состоит в том, чтобы загрузить пустую страницу как заполнитель со своим собственным JS-кодом и скрытой формой. Затем родительский код JS отправит эту скрытую форму, где его #action
указывает на внешний iframe. Как только происходит перенаправление / отправка, код JS, который все еще работает на этой странице, может отслеживать ваши document.location.href
изменения значения.
Вот пример JS, используемый в iframe:
;(function($) {
Drupal.behaviors.commercePayPointIFrame = {
attach: function (context, settings) {
if (top.location != location) {
$('html').hide();
top.location.href = document.location.href;
}
}
}
})(jQuery);
А вот JS используется на родительской странице:
;(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);
Затем во временную пустую целевую страницу необходимо включить форму, которая будет перенаправлять на внешнюю страницу.