如何回应iframe的ajax调用?

时间:2014-02-27 15:41:33

标签: javascript ajax iframe

在我的iframe页面中,用户可以通过ajax调用在列表中添加或删除项目。

我还需要更新父页面中列表中的项目数。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

我在iFrame中使用Javascript将父级和iFrame之间的通信发布到父级。

在iFrame中:

window.top.postMessage('Message', '*');

您也可以通过调用发布此消息服务器端(C#)(*请注意,您需要在页面上执行asp:ScriptManager控件才能执行此操作)

ScriptManager.RegisterStartupScript(this, this.GetType(), "login_message", "javascript:window.top.postMessage('Message', '*');", true);

在Parent中,您需要设置一个监听器:

/* Retrieve message from iFrame */
window.onmessage = function (e) {
    var strMessage = e.data.toString();
    if (strMessage == 'Message') {
        /* Message Actions */
    }
};

如果您对IE 7或10+有兼容性问题,则可能需要以这种方式处理。我发现我上面这样做的方式在IE的某些版本中存在问题(即使是某些较新的版本,如10)。

// Create IE + others compatible event handler
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";

// Listen to message from child window
eventer(messageEvent, function (e) {
    var strMessage = e.data.toString();
    if (strMessage == 'Message') {
        /* Message Actions */
    }
}, false);

在此示例中,字符串“Message”正从iFrame传递给父级。父接收后将其存储在var strMessage中。然后我在应用操作之前检查消息是否是我所期望的。您可以轻松地将邮件设为列表中的项目数。

这与How to communicate between iframe and the parent site?非常相似。请注意,这在IE 7或更早版本中不起作用。