18

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

我使用标准

window.open()

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

提前致谢!

4

4 回答 4

29

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

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

否则,您确实会冒开瓶器不响应您的初始调用,并且您无法从中获取元素的风险。

作为 jQuery,我认为(基于一个答案,这里:如何使用 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
    }
}
于 2012-11-09T16:22:49.637 回答
4

window.opener.document.getElementById("你的元素").value

于 2012-11-09T16:19:12.423 回答
0

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

var popUpHandle = window.open();

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

var originalWindow = window.opener;

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

于 2012-11-09T16:21:16.767 回答
0

parent.document 在我的情况下有所帮助。

var elem = parent.document.getElementById("overlay_modal");
if (elem) {
alert('setting attribute');
elem.setAttribute("onclick", "Windows.close('2', event);");
}
于 2018-10-12T07:51:47.367 回答