在我的iframe页面中,用户可以通过ajax调用在列表中添加或删除项目。
我还需要更新父页面中列表中的项目数。我怎么能这样做?
答案 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或更早版本中不起作用。