Подтвердить что ты не робот

Как получить ссылки на все уже открытые дочерние окна

Я хочу получить ссылки на все уже открытые дочерние окна. там в любом случае? Я не использую child = window.open(....), просто используя window.open(....) и открывая несколько дочерних окон.

4b9b3361

Ответ 1

Если вы не хотите менять текущий код, вы можете просто переопределить функцию window.open():

var openedWindows = [];
window._open = window.open; // saving original function
window.open = function(url,name,params){
    openedWindows.push(window._open(url,name,params));
    // you can store names also...
}

Запустите этот код перед вызовом window.open(). Все ссылки на открытые окна будут храниться в массиве openedWindows. Вы можете получить к ним доступ в любом месте.

Ответ 2

Я не думаю, что вы можете, если не знаете имена окон, которые, как я предполагаю, вы этого не делаете. (Если вы знаете их имена, вы можете использовать window.open("", "name"), чтобы получить ссылку на них.)

Лучшим вариантом является, конечно же, запомнить ссылку, возвращенную с window.open в первую очередь — но вы это знаете.: -)

Ответ 3

Хорошо, я использовал ответы на этот вопрос в Oracle CRM onDemand, чтобы отключить выбор во всплывающем окне, выполняющем script из родительского окна, и это сработало! (У меня нет контроля над генерацией всплывающих окон, они открываются инфраструктурой приложения)

Посмотрим, как я это сделал:

Контекст. На подробной странице пользователь может добавить информацию, щелкнув значок увеличительного стекла → > открывается новое окно с формой поиска, но выбор нарушает администратора: if пользователь изменит свое значение по умолчанию, он/она получит доступ к запрещенным записям! Боже мой!

Первый подход. Отключите это сейчас!

Попытка. Я нашел изображение onclick, связанное с моими инструментами для браузера (F12). Был метод openAssocPopup, а затем я знал имя дочернего окна: "OccamPopup1":)

Хорошо! Так что сделайте волшебство (выполненное в родительском окне):

window.open("","OccamPopup1").document.getElementById("frmSearch.AQ").setAttribute("disabled", true);

Я думаю, что это может помочь, так как этот вопрос мне тоже помог. Ты был прав. Теперь я пытаюсь обернуть дочерний объект документа в родительский объект jQuery, чтобы я мог получить доступ ко всему дочернему DOM... но это еще одна история...

Ответ 4

Лучше всего назвать окна с помощью префикса и счетчика.

Мне нужно было определить, было ли именованное окно (т.е. CBCheckout) уже открыто и использовало это:

var signupWindow = window.open('','CBCheckout','toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no,width=1,height=1');
try {
    if (signupWindow.document.location.href == "about:blank") {
        signupWindow.close();
        signupWindow = undefined;
    }
} catch (e) { }

Это отобрало ссылку на именованное открытое окно. Если его не было, вы увидите небольшое всплывающее окно на секунду.

Если вы знаете возможные имена окон, вы можете перебирать имена, пытаясь найти их.