Aqui está o método usado nos módulos Commerce SagePay e Commerce Paypoint Drupal, que basicamente se comparam document.location.hrefao 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 #actionaponta 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.hrefalteraçõ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.
srcpropriedade 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.