В 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;
}
Я склонен думать, что это какая-то проблема с синхронизацией, за исключением того, что вызов window.open() должен быть синхронным, насколько я могу судить, и я не знаю, почему иногда он удаётся, а не другие. Существует подпрограмма, которая выполняется при загрузке окна, возможно, она каким-то образом портит возврат значения из open().
Я не очень разбираюсь в JavaScript, как те из вас, кто разбирается, вероятно, к этому времени уже скажут. Если в коде, который я здесь разместил, есть что-то такое, что вы можете сказать мне, что это неправильно, это здорово; Я больше надеюсь на кого-то, кто сможет объяснить, как должен работать всплывающий отчет в рамке. Надеюсь, мне удастся сделать это, не заменяя слишком большую часть имеющегося у меня кода, поскольку он хрупкий и, скажем так, не был написан с учетом рефакторинга.
Подробнее здесь: https://stackoverflow.com/questions/230 ... -sometimes
Мобильная версия