Aqui está o método usado nos módulos Commerce SagePay e Commerce Paypoint Drupal, que basicamente se comparam document.location.href
ao valor antigo, carregando primeiro seu próprio iframe, depois o externo.
Então, basicamente, a idéia é carregar a página em branco como um espaço reservado com seu próprio código JS e formulário oculto. O código JS pai enviará o formulário oculto onde #action
aponta para o iframe externo. Depois que o redirecionamento / envio acontece, o código JS que ainda está sendo executado nessa página pode rastrear suas document.location.href
alterações de valor.
Aqui está o exemplo de JS usado no iframe:
;(function($) {
Drupal.behaviors.commercePayPointIFrame = {
attach: function (context, settings) {
if (top.location != location) {
$('html').hide();
top.location.href = document.location.href;
}
}
}
})(jQuery);
E aqui está o JS usado na página pai:
;(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);
Em seguida, na página de destino temporária em branco, é necessário incluir o formulário que será redirecionado para a página externa.
src
propriedade mudará quando um link no iframe for clicado? Não tenho certeza disso - se eu tivesse que adivinhar, se diria "não". Não são maneiras de propriedades do monitor (no Firefox, pelo menos, AFAIK), mas eu não tenho certeza se ele vai ser de alguma utilidade neste caso.