Вот мой сценарий:
У меня есть страница, содержащая несколько ссылок; каждая ссылка предназначена для открытия другого окна, содержащего PDF-файл. Загвоздка в том, что я не могу, чтобы это окно напрямую переходило к PDF-файлу, потому что я не хочу, чтобы конечному пользователю было очевидно, что PDF-файл находится в другом домене, и мне нужно назвать PDF-файл иначе, чем обычно объявиться.
Итак, у меня есть две страницы: одна пустая и содержит только фрейм, который будет использоваться для отображения PDF-файлов:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>[PDF]</title>
</head>
<frameset>
<frame id = "pdfFrame">
</frameset>
</html>
И на странице со ссылками у меня есть следующая функция, которая вызывает эту страницу (мы назовем указанную выше страницу «pdf.html»):
function OpenWindow(pdfTitle, pdfLocation)
{
var myWindow = window.open("pdf.html", "", "toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=1,width=700,height=600");
myWindow.document.title = pdfTitle;
myWindow.document.getElementById('pdfFrame').src = pdfLocation;
}
По большей части это работает нормально; однако иногда всплывающее окно не загружается раньше, чем строки выше, которые устанавливают источник заголовка / кадра, и оно вылетает (или, по крайней мере, загружается некорректно).
Мой вопрос: есть ли простой способ добавить какой-то блокирующий вызов после открытия окна, чтобы дождаться, пока мы не будем готовы запустить этот код?
Спасибо!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы не можете заблокировать его, пока он не загрузится, но вы можете установить событие во всплывающем окне, например:
myWindow.onload = function()
{
document.title = pdfTitle;
document.getElementById('pdfFrame').src = pdfLocation;
}
Раньше у меня была похожая идея, и я пробовал то же самое; однако это не сработало ... Я думаю, эта функция создается в родительском окне после загрузки дочернего элемента