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

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

4 ответов


если вы не хотите изменять текущий код, вы можете просто переопределить 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 массив. Вы можете получить к ним доступ в любом месте


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

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


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

давайте посмотрим, как я сделал это:

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

Первый Подход: отключите этот выбор сейчас!!

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

хорошо! Итак, давайте сделаем немного магии (выполняется в Родительском окне):

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

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


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

Мне нужно было определить, было ли уже открыто именованное окно (т. е. 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) { }

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

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