2011-01-19 3 views
1

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

форма на домене А использует форму 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" })) 
{ %> 

Тогда на области Ь, я с помощью пользовательских JQuery плагин управлять своим IFRAME, позволяя внешние события, чтобы изменить ГКЗ фрейма , Использование выглядит следующим образом

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

Что вызывает IFRAME изменить это к исходным текстам на странице кредитной карты. Я также приложил OnLoad к IFRAME, как это:

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

    //do stuff based on url 
}); 

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

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

EDIT:

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

небезопасный 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); 
} 

ответ

3

Я думаю, что вы просто хотите, чтобы передать события из плавающего фрейма родительского окна. Пожалуйста, поправьте меня, если я ошибаюсь.

С вашего iFrame вы не можете это сделать?

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

Edit: Позвольте мне попробовать еще раз.

Это работает для меня:

<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> 
+0

Я попытался с помощью триггера на родителе изнутри фрейма, но я получаю 'Опасное JavaScript попытка доступа кадр с URL HTTP: // Localhost: 59905/Главная/Рамку из фрейма с URL-адресом http: // localhost: 27412/Framed/Index /. Домены, протоколы и порты должны совпадать. – Josh

+0

Эта проблема в междоменном пространстве очень раздражает. Найдите «кросс-доменный взлом» для получения информации о том, как обойти его, если хотите. Я обновил ответ другим решением. –

+0

Событие onload не запускается при использовании ajax. У меня включено событие onload.Моя проблема заключается в том, что я хочу иметь возможность передавать конкретные пользовательские события с iframe на родительскую страницу. – Josh

 Смежные вопросы

  • Нет связанных вопросов^_^