JavaScript window.open иногда возвращает значение nullC#

Место общения программистов C#
Ответить
Anonymous
 JavaScript window.open иногда возвращает значение null

Сообщение Anonymous »

Я пытаюсь поддерживать систему, которую не писал (и не так ли?). Он написан на C Sharp и JavaScript и содержит отчеты Telerik.

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

Код: Выделить всё

var oIframe = $("iframe id='idReportFrame' style='display:none' name='idReportFrame' src=''>");
oIframe.load(function() { parent.ViewReports(); });

oIframe.appendTo('body');

try
{
$('#idReportForm').attr('target', 'idReportFrame');
$('#idReportForm').submit();
}
catch (err) { // I did NOT write this
}
Затем функция загрузки:

Код: Выделить всё

function ViewReports()
{
var rptName = $("#ReportNameField").val();

if (rptName == '') { return false; }

var winOption = "fullscreen=no,height=" + $(window).height() + "left=0,directories=yes,titlebar=yes,toolbar=yes,location=yes,status=no,menubar=yes,scrollbars=no,resizable=no, top=0, width=" + $(window).width();
var win = window.open('@Url.Action("ReportView", "MyController")?pReportName=' + rptNameCode, 'Report', winOption);
win.focus();
return false;
}
Когда я выполняю это (по крайней мере, в Chrome), появляется всплывающее окно и помещается в него отчет. Однако точки останова в коде C# указывают на то, что он вызывается 2 или 3 раза. Точки останова в JavaScript и анализ небольшого журнала в среде отладки JavaScript в Chrome показывают, что вызов win.focus() завершается неудачно один или два раза, прежде чем завершиться успешно. Он возвращает неопределенное значение, а затем кажется, что первая процедура, указанная выше, выполняется снова.

Я склонен думать, что это какая-то проблема с синхронизацией, за исключением того, что вызов window.open() должен быть синхронным, насколько я могу судить, и я не знаю, почему иногда он удаётся, а не другие. Существует подпрограмма, которая выполняется при загрузке окна, возможно, она каким-то образом портит возврат значения из open().

Я не очень разбираюсь в JavaScript, как те из вас, кто разбирается, вероятно, к этому времени уже скажут. Если в коде, который я здесь разместил, есть что-то такое, что вы можете сказать мне, что это неправильно, это здорово; Я больше надеюсь на кого-то, кто сможет объяснить, как должен работать всплывающий отчет в рамке. Надеюсь, мне удастся сделать это, не заменяя слишком большую часть имеющегося у меня кода, поскольку он хрупкий и, скажем так, не был написан с учетом рефакторинга.

Подробнее здесь: https://stackoverflow.com/questions/230 ... -sometimes
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»