父子页面相互调用总结

父子页面相互调用是一个在开发中经常遇到的问题,但是没有找到过比较全面的文章介绍。在此总结下来,供大家参考。

四种方式

       一般情况下,我们可以使用iframewindowopenshowModalDialogshowModelessDialog方法这四种方式打开一个子窗口。(showModalDialogshowModelessDialogIE独有的。)

下面分这四种方式来讨论如何父子页面互相调用。

分情况讨论

iframe

在这种情况下,子页面直接通过parent.var就可以对父页面的变量和方法进行操作。

父页面可以通过拿到iframecontentWindow对象来访问子页面的window

父页面代码,文件名为iframe.html

      

      

      

      

      

      

子页面代码,文件名为iframe.child.html

      

      

      

       我是在IFrame中的子窗体。

      

 

open

使用window.open打开的子页面,在子页面中可以通过window.opener来访问父页面的window对象。

在父页面中,可以通过window.open方法的返回值拿到子页面的window,就可以操作子页面的变量和方法。

父页面代码,文件名为window.open.html

      

       window.open</span><span>父页面</span><span>

      

      

      

 

子页面代码,文件名为window.open.child.html

      

       window.open</span><span>子页面</span><span>

      

 

showModalDialog

使用showModalDialog打开的子页面,如果想访问父页面的window,需要在执行showModalDialog方法的时候,把父页面的window当作参数传递过去。见父页面的代码。

因为showModalDialog是阻塞的,父页面的代码在子页面不关闭之前无法继续执行,所以只能通过returnValue拿到子页面的变量,见子页面的代码。

父页面代码,文件名为ShowModalDialog.html

      

       ShowModalDialog</span><span>父页面</span><span>

      

      

子页面代码,文件名为ShowModalDialog.Child.html

      

       ShowModalDialog</span><span>子页面</span><span>

      

       我是使用ShowModalDialog打开的子页面。

      

      

      

 

showModelessDialog

使用showModelessDialog打开的子页面,同样需要在执行方法的时候,把父页面的window当作参数传递过去。

但不同之处在于showModelessDialog会直接返回子页面的window对象,不是阻塞的,可以直接对子页面的方法和变量进行访问。

父页面代码,文件名为ShowModelessDialog.html

      

       ShowModalDialog</span><span>父页面</span><span>

      

      

 

子页面代码,文件名为ShowModelessDialog.html

      

       ShowModalDialog</span><span>子页面</span><span>

      

       我是使用ShowModalDialog打开的子页面。

      

      

      

你可能感兴趣的:(Web)