2011-01-19 84 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