Это было сделано намеренно из соображений безопасности. Так что вы в основном правы, простого пути нет.
Однако, если вы запускаете веб-приложение, открывающее окна, в «главном» окне может храниться список дескрипторов для открытия окон. Вы можете инициализировать массив следующим образом:
var openWindows = [];
, а затем есть метод открытия окна, который выглядит следующим образом:
function openWindow(url, ... etc)
{
var w = window.open(url, ... etc);
openWindows[openWindows.length] = w;
}
Предполагая, что вы использовали этот метод, чтобы открыть все другие окна, и предполагая, что вы можете удерживать коллекцию (если главное окно перейдет на другую страницу, массив будет потерян), у вас будет список окон. Вы можете узнать, сколько из них все еще открыто, итерируя по массиву и проверяя свойство "window.closed".