javascript - 在打开使用保存的 html 的报告之前在服务器端保存 html 在 Safari 上不起作用

标签 javascript c# jquery cross-browser dom-events

我想出了一种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 code that tries to open a pop-up window when the browser first loads (or unloads) a page will fail.

考虑到上述陈述,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 将重定向 header 传递给 print.aspx

关于javascript - 在打开使用保存的 html 的报告之前在服务器端保存 html 在 Safari 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2016520/

相关文章:

jquery indexOf 与 IE 的问题

javascript - 在 onpaste 事件中发出 ajax 请求时访问被拒绝

javascript - 在每个 p 中添加数字(值)输入,完成后提醒最高数字

javascript - 使用 Ant 连接 JavaScript 文件

c# - 调试 SQL 端散列失败

c# - 如何从 Parallel.ForEach 收集返回值?

javascript - Android 上的 HTML <select> 框中未触发 Onfocus 事件

javascript - 构造函数模式和原型(prototype)模式的区别

javascript - Ajax 没有回答我真实的情况

c# - 迭代SHA512使其更安全?