[英]Saving html on servers side prior to opening report that use that saved html doesn't work on Safari
我想出了一個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和PC上都經過測試的所有瀏覽器都適用,但MAC上的Safari除外。
知道為什么會這樣嗎?
編輯:
當瀏覽器首次加載(或卸載)頁面時,嘗試打開彈出窗口的JavaScript代碼將失敗。
考慮到上述陳述,可能是Safari將ajax請求后試圖打開彈出窗口的嘗試視為初始加載/卸載頁面階段,因此禁止這樣做?
彈出窗口阻止程序很有可能會阻止您的window.open()
。
做這樣的事情可能會更好:
function SaveAndPrintHtml(htmlToPrint) {
var $form = $('<form method="post" />');
$form.attr('target', '_blank');
$form.attr('action', 'temp.aspx?Action=SaveHtmlToPrint');
$form.append($("<input type='hidden'/>").val(htmlToPrint);
// grab the form DOM object and submit it - it should open in a new window:
$form[0].submit();
}
這應該將帶有正確數據的表單發布到正確的url,打開一個新窗口。 然后,使temp.aspx
將重定向標頭傳遞給print.aspx
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.