Удалить родословную из дочернего окна - PullRequest
3 голосов
/ 10 февраля 2011

Я имею дело со старым сайтом разработчика и кодом.

Существует глобальная функция печати, которую написал парень, которая в основном распознает любое новое открывающееся окно (из любого метода) и "href.match" - имя домена ... сценарий затем при необходимости применяет таблицу стилей печати и запускает 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 ]

5 голосов
/ 10 февраля 2011

Свойство opener - это то, что дает доступ к дочернему окну, поэтому, если вы хотите отключить его, все, что вам нужно сделать, это установить его в null. При этом я всегда копирую его в другое свойство перед тем, как обнулять его, если вам это нужно по другим причинам ...

if(bustInheritance) {
  window.oldOpener = window.opener;
  window.opener = null;
}
1 голос
/ 10 февраля 2011

Хаки, но может сделать свое дело:

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;
...