Я придумал javascript, который очищает экран html, необходимый для отчета, и сохраняет его на сервере с помощью вызова ajax, после чего я вызываю отчет, который использует ранее сохраненный html через всплывающее окно.
Вот код:
function SaveAndPrintHtml(htmlToPrint) {
try {
$.ajax({
type: 'POST',
async: true,
url: 'temp.aspx?Action=SaveHtmlToPrint', //SAVE DATA TO PRINT
data: {
htmlToPrint: encodeFormData(htmlToPrint)
},
dataType: "json",
success: function() {
try {
var url = 'report.aspx';
window.open(url, '_blank'); //OPEN REPORT
} catch (e) {
}
},
error: handleError
});
} catch (ex) {
alert('Unexpected Error!; \n\r ' + ex.message);
}
Идея заключается в том, что когда пользователь нажимает кнопку печати, чтобы получить html с клиента, отправьте его на сервер, сохраните его и при успешном сохранении откройте отчет, который использует ранее сохраненный html, во всплывающем окне.
Этот подход прекрасно работает во всех браузерах, протестированных как на MAC, так и на ПК, кроме Safari на MAC.
Есть идеи, почему это может быть?
EDIT:
JavaScript-код, который пытается открыть всплывающее окно, когда браузер впервые загружает (или выгружает) страницу, не удастся.
Принимая во внимание вышеупомянутое утверждение, возможно, Safari рассматривает попытку открыть всплывающее окно после ajax-запроса как начальную стадию загрузки / выгрузки страницы и поэтому запрещает это?