【问题标题】:Popup window accessing parent dom访问父dom的弹窗
【发布时间】:2012-11-09 16:18:07
【问题描述】:

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

我正在使用标准

window.open()

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

提前致谢!

【问题讨论】:

    标签: javascript html popup


    【解决方案1】:

    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
        }
    }
    

    【讨论】:

    • 太棒了。现在我将如何使用 jquery 来访问元素而不是 getElementById 我宁愿做 $("#id").val()
    • 虽然您可以稍微巩固一下,但我会谨慎行事。弹出窗口变得复杂,主要是由于弹出窗口阻止程序的所有问题,而重新加载弹出窗口等简单的事情可能会破坏它与其父级之间的连接。
    • 我还没有机会在 IE 中尝试这个。再次,弹出窗口受到问题的困扰(弹出窗口阻止程序的使用总是很奇怪),因此您将不得不摆弄它以查看在哪个浏览器中有效。你处理的是什么版本的IE?如果您使用的是 IE9,您是否可以看到控制台中显示任何错误?
    • 我的情况:(在IE11中测试,对于FF,Chrome,window.parent在任何一种情况下都可以工作。)当我在iframe中加载一些东西时,在iframe中加载的页面可以调用window.parent对于它的属性,但是,当我通过window.open 调用弹出窗口时,孩子不能为其属性调用window.parent,如果我检查window.parent.name,它反而会显示自己。在这种情况下,可以为它的属性调用window.opener。我认为这种行为是在 IE 中。对于 FF 和 Chrome,我尝试过没有父级,只是 window.parent。
    • 这对我有用。它解决了这个错误无法读取 null 的属性(读取“文档”)。谢谢
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      var popUpHandle = window.open();
      

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

      var originalWindow = window.opener;
      

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

      【讨论】:

      • OP 试图从开启器获取数据,而不是相反,此代码将启用。
      • Shure,但为了避免往返服务器,他必须在刚刚打开的弹出窗口中至少写 something。否则他将往返于服务器以加载至少一个脚本,因此他可以在服务器上生成弹出内容。
      【解决方案4】:

      parent.document 对我有帮助。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-19
        • 1970-01-01
        • 2021-09-05
        • 2015-02-17
        • 1970-01-01
        • 2011-06-13
        • 1970-01-01
        • 2011-02-06
        相关资源
        最近更新 更多