инициировать событие загрузки iframe при выполнении замены ajax для содержимого внутри iframe - PullRequest
1 голос
/ 19 января 2011

У меня есть вид с формой оплаты кредитной картой, размещенной в Домене A. В домене B есть отдельный веб-сайт с iframe для формы кредитной карты в домене A.

В форме в домене 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, позволяя внешним событиям изменять источник iframe.Использование выглядит следующим образом:

$('#myIframe').frameplugin('creditcard');

, что заставляет iframe изменить свой src на страницу кредитной карты.Я также прикрепил загрузку к iframe следующим образом:

$(this).bind('load', function () {
    var src = $(this).attr('src').toLowerCase();

    //do stuff based on url
});

Что я хочу сделать, это когда форма кредитной карты отправлена ​​и замена выполнена, я хочу, чтобы документ в iframe вызвалСобытие onraf iframe, так что домен b знает, что что-то произошло.

Другим решением было бы каким-то образом связать пользовательские события с iframe и вызвать их в рамочном документе.Я не уверен, как / если это вообще сработает.Есть идеи?

РЕДАКТИРОВАТЬ:

Я пытаюсь использовать триггер события от iframe до родителя, и я получаю ошибку.

Небезопасная попытка JavaScriptчтобы получить доступ к фрейму с URL http://localhost:59905/Home/Framed из фрейма с URL http://localhost:27412/Framed/Index/. Домены, протоколы и порты должны совпадать.

Вот моя привязка события

$(document).bind('success:myframe', function (event, referenceId) {
    //do something
});

и вот вызов javascript со страницы в рамке.Это вызывается из OnSuccess в ajax.beginform

function paymentReceived() {
    var referenceNumber = $('#referenceNumber').text();
    $(top.document).trigger('success:myframe', referenceNumber);
}

1 Ответ

3 голосов
/ 19 января 2011

Я думаю, вы просто хотите передать события из 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>
...