弹出窗口访问父dom

时间:2012-11-09 16:18:08

标签: javascript html popup

我有一个弹出窗口,需要访问父dom才能生成打印页面。打印页面的结构与父页面的结构明显不同,因此打印CSS不能解决问题。我基本上想要弹出一个窗口然后让那个窗口从父节点获取一些数据,甚至从弹出窗口访问dom并生成打印页面而不必再次访问服务器。我有什么想法可以实现这个目标吗?

我正在使用标准

window.open()

弹出一个窗口。我需要这个解决方案不是黑客,并且与所有主流浏览器都是跨浏览器兼容的。

提前致谢!

4 个答案:

答案 0 :(得分:24)

Sajjan的回答是一个开始,但在尝试访问它们之前,最好确保您的对象可用:

var opener = window.opener;
if(opener) {
    var oDom = opener.document;
    var elem = oDom.getElementById("your element");
    if (elem) {
        var val = elem.value;
    }
}

否则,您确实存在开启者没有响应您的初始调用的风险,并且您无法从中获取该元素。

作为jQuery,我认为(根据答案,在这里:how to access parent window object using jquery?):

var opener = window.opener;
if(opener) {
    var elem = opener.$("#elementId");
    if (elem) {
        var val = elem.val(); // I forgot we're dealing with a jQuery obj at this point
    }
}

答案 1 :(得分:4)

window.opener.document.getElementById(“your element”)。value

答案 2 :(得分:0)

根据MDNwindow.open()将为您返回新窗口的句柄。

var popUpHandle = window.open();

使用此句柄,您应该能够访问PopUp的DOM。反之亦然,使用已经提到的window.opener。再次提到MDN

var originalWindow = window.opener;

尽管如此,您最喜欢的搜索引擎会为您提供更多详细信息,因为主题相当陈旧,您的方法已经完成了一百万次或更多次。

答案 3 :(得分:0)

parent.document对我来说有帮助。

var elem = parent.document.getElementById("overlay_modal");
if (elem) {
alert('setting attribute');
elem.setAttribute("onclick", "Windows.close('2', event);");
}