2011-01-19 82 views
1

我擁有域A上託管的信用卡付款表單的視圖。域B具有單獨的網站,其域A上的信用卡表單具有iframe。在iframe中的內容上執行ajax替換時觸發iframe onload事件

上域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更改爲信用卡頁面。我還附上一個onload到IFRAME這樣的:

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

    //do stuff based on url 
}); 

我想要做的是當信用卡表單提交和置換完成後,我想在iframe中的文件來觸發的iframe的onload事件,以便域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); 
} 

回答

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

我試圖使用從iframe中父觸發,但我得到'不安全的JavaScript嘗試與URL訪問http幀://本地主機:59905 /首頁/幀從URL http:// localhost:27412/Framed/Index /。域名,協議和端口必須匹配。' – Josh 2011-01-19 20:41:17