删除父母表单子窗口

时间:2011-02-10 19:58:14

标签: javascript window parent-child

我正在处理旧开发者的网站和代码。

有一个人写的GLOBAL打印功能,基本上可以感知打开的任何新窗口(从任何方法)和“href.match”es域名...然后脚本应用打印样式表,如果需要和触发window.print。

这一切都是通过每个页面上的全局脚本完成的,并包含其他一些功能。

我厌倦了为每个页面编写案例,我想要逃避这个功能。此外,如果我为特定页面编写NOT子句,则子窗口中域内打开的任何后续页面将接收该打印函数。

有没有办法在这个新窗口中“破坏”继承?基本上要使这个窗口不是产生它的父母的孩子吗?

    addEvent(window, 'load', function () {
    var printBtn = document.getElementById('print-page');
    if (window.opener && window.opener.location.href.match('domainnamehere')) {
        var printCSS = document.createElement('link');
        var a = document.getElementsByTagName('a');
        printCSS.href = 'css/print.css'
        printCSS.setAttribute('type', 'text/css');
        printCSS.setAttribute('rel', 'stylesheet');
        document.getElementsByTagName('head')[0].appendChild(printCSS);

        for (var i = 0; i < a.length; i++) {
            a[i].href="";
            a[i].onclick = function () { return false; };
            a[i].style.cursor = "default";
        }

        window.print();
    } else if (printBtn){
        printBtn.onclick = function () {
            var printWindow = window.open(window.location, 'printwindow', 'resizable,width=800,height=800,scrollbars');

            return false;
        };
    }
});

2 个答案:

答案 0 :(得分:5)

opener属性可以访问子窗口,因此如果要断开连接,只需将其设置为null即可。这样做时,我总是将它复制到另一个属性,然后在因为其他原因需要它时无效...

if(bustInheritance) {
  window.oldOpener = window.opener;
  window.opener = null;
}

答案 1 :(得分:1)

Hacky,但可能会做到这一点:

var win_onload = window.onload;
// replace it with a function that does nothing
window.onload = function () { };

... open your window ...

// put the event handler back
wndow.onload = win_onload;