javascript window.open 父子窗口通讯
js中可以使用window.open来弹出一个新窗口。例如一下代码可以弹出一个居中的窗口:
var __popupReference = null; function openExplorerPopUp(url, width, height) { if (isNaN(width)) { width = 1000; } if (isNaN(height)) { height = screen.height * 0.8; } x = (screen.width - width) / 2; y = (screen.height - height) / 2; if ((null != __popupReference) && (undefined != __popupReference)) { __popupReference.close(); } if (url.length > 0) { var style = "toolbar=no,location=no,directories=no,menubar=no,scrollbars=no,resizable=no,status=no,width=" + width + ",height=" + height + ",left=" + x + ",top=" + y; __popupReference = window.open(url, '', style); try { if (window.focus()) { __popupReference.focus(); } } catch(e) {} } }
如何让父窗口和弹出的新窗口进行通讯呢?下面分别阐述。
先看父窗口与子窗口如何通讯。注意上面代码中有一行“__popupReference.close();”,其用途就是用于关闭弹出的窗口,我们知道在js中可以使用window.close()来关闭当前窗口,通过行为可以得出__popupReference对象其实就是window对象结论,只不过是子窗口的。所以window.open返回值也就是子窗口的句柄了,有了这个句柄,在父窗口就可以操作子窗口的DOM、js定义的function等。例如:__popupReference.document.getElementById(‘subDomId’).style.display = ‘none’; __popupReference.subWinDefineFunction()。
在子窗口中只要能拿到父窗口的句柄,那么就能进行通讯。在内置的window对象中有一个opener属性,就是其父窗口的句柄。有了这个,通讯就很容易了。例如:
window.opener.getElementById(‘parentDomId’).style.display = ‘none’; window.opener.parentDefineFunction();