jQuery - 在对话框iframe中运行函数

时间:2014-03-22 19:56:30

标签: java jquery jsp iframe

我创建了一个JSP页面,使用jQuery打开一个对话框。

JSP(div):

<div id="dialog" title="Welcome To Chat" class="ui-helper-hidden tabdialog">
<iframe id="inlineframe" name="inlineframe" src="" frameborder="0" scrolling="auto" width="600" height="600" marginwidth="5" marginheight="5" ></iframe>
</div>

jQuery的:

  $("#inlineframe").attr("src","chat.jsp?roomid=" + id[1]);
  $( "#dialog" ).dialog({
      width:626,
      height:626,
      beforeClose:function(){
          alert("closing");
          }
    }); 

到目前为止,这么好。注意我现在只在beforeClose函数上使用警报。 iframe本身正在打开一个名为chat.jsp的JSP页面,其中包含大量jQuery函数,因为它是聊天程序的前端。

问题:

  

如何向chat.jsp页面发送消息,以便它知道对话框正在关闭?&#34;

这很重要,因为chat.jsp需要与用户退出聊天的服务器进行通信。这个过程可能需要大约一秒钟,因此我需要至少延迟对话的关闭时间。

将结束事件传达给chat.jsp并提供足够时间执行适当关闭的最佳选择是什么?

1 个答案:

答案 0 :(得分:1)

如果父页面(打开对话框)和iframe页面由同一个域提供,则可以执行以下操作:

从对话框中删除关闭按钮(参见this answer)。

在iframe页面中放置关闭按钮。此按钮会将用户注销,然后通过调用以下方式关闭对话框:

window.top.$('#dialog').dialog('close');

如果想要分离父页面和iframe页面(因此iframe页面不需要知道对话框div的id),您可以让关闭按钮在父文档上触发自定义事件:

window.top.$(document).trigger('dialog-close');

在父页面中注册事件处理程序:

$(document).on('dialog-close', function() {
    $('#dialog').dialog('close');
});