簡體   English   中英

在打開使用已保存的html的報告之前在服務器端保存html在Safari上不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM