ドメイン A でホストされているクレジット カード支払いフォームのビューがあります。ドメイン B には、ドメイン A のクレジット カード フォームへの iframe を備えた別の Web サイトがあります。
ドメイン A のフォームは、次のような ajax フォームを使用します。
<% using (Ajax.BeginForm("CreditCard", "Framed", new { id = Model.SID },
new AjaxOptions()
{
HttpMethod = "POST",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "credit-card-wrapper",
LoadingElementId = "loading-pane"
},
new { id = "new-creditcard-form" }))
{ %>
次に、ドメイン b で、カスタム jquery プラグインを使用して、外部イベントが iframe の src を変更できるようにすることで iframe を管理しています。使い方はこんな感じ
$('#myIframe').frameplugin('creditcard');
これにより、iframe の src がクレジット カード ページに変更されます。また、次のように iframe に onload を添付しました。
$(this).bind('load', function () {
var src = $(this).attr('src').toLowerCase();
//do stuff based on url
});
私がしたいのは、クレジット カード フォームが送信され、交換が完了したときに、iframe 内のドキュメントで iframe の onload イベントをトリガーして、ドメイン b が何かが起こったことを認識できるようにすることです。
もう 1 つの解決策は、カスタム イベントを iframe に何らかの方法でバインドし、フレーム化されたドキュメント内でそれらをトリガーすることです。それがどのように/うまくいくかはわかりません。何か案は?
編集:
iframe から親までのイベント トリガーを使用しようとすると、エラーが発生します。
安全でない JavaScript が、URL http://localhost:27412/Framed/Index/のフレーム から URL http://localhost:59905/Home/Framedのフレームにアクセスしようとしています 。ドメイン、プロトコル、およびポートが一致する必要があります。
これが私のイベントバインディングです
$(document).bind('success:myframe', function (event, referenceId) {
//do something
});
フレーム化されたページからの JavaScript 呼び出しは次のとおりです。これは、ajax.beginform の OnSuccess から呼び出されます。
function paymentReceived() {
var referenceNumber = $('#referenceNumber').text();
$(top.document).trigger('success:myframe', referenceNumber);
}