我有一个弹出窗口,需要访问父dom才能生成打印页面。打印页面的结构与父页面的结构明显不同,因此打印CSS不能解决问题。我基本上想要弹出一个窗口然后让那个窗口从父节点获取一些数据,甚至从弹出窗口访问dom并生成打印页面而不必再次访问服务器。我有什么想法可以实现这个目标吗?
我正在使用标准
window.open()
弹出一个窗口。我需要这个解决方案不是黑客,并且与所有主流浏览器都是跨浏览器兼容的。
提前致谢!
答案 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)
根据MDN,window.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);");
}