1

ドメイン 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);
}
4

1 に答える 1

3

iFrame から親ウィンドウにイベントを渡したいだけだと思います。私が間違っている場合は、私を修正してください。

あなたのiFrameから、これを行うことはできませんか?

$(document).ready(function() {
    parent.alertPageWithIFrameThatLoadIsComplete();
});

編集:もう一度やり直してみましょう。

これは私のために働く:

<script type="text/javascript">
    function oniframeLoad() {
     alert("Loaded!");
    }

    function changePage() {
     frames["my_iframe"].location.href = "http://google.com";
    }

    setTimeout(changePage, 2000);
</script>

<iframe onload="oniframeLoad()" name="my_iframe" id="my_iframe" src=""></iframe>
于 2011-01-19T19:57:29.200 に答える