FineUI 官方论坛

标题: 同一个页面使用FineUI控件与打印组件Lodop [打印本页]

作者: sanshi    时间: 2013-11-17 20:50
标题: 同一个页面使用FineUI控件与打印组件Lodop


前几天,网友 ⑥阿太⑥ 在使用FineUI和打印组件 Lodop时遇到一个问题,在IE8下,每次调用完Lodop结束后会出现如下错误:
[attach]3671[/attach](弹出打印窗口时不会出错)
[attach]3672[/attach]
(关闭打印窗口时出错)

并且这个问题在IE9,Firefox,Chrome中都没出现。

前台代码:
  1. <form id="form1" runat="server">
  2.     <x:PageManager ID="PageManager1" runat="server" />
  3.     <x:Button Text="点击弹出对话框" runat="server" ID="btnHello" OnClick="btnHello_Click">
  4.     </x:Button>
  5.     </form>
复制代码
后台代码:
  1. public static string GetPrintHtmlJS(string title, int layout, string top, string left, string width, string height, string strHtml)
  2. {
  3.         var sb = new StringBuilder();
  4.         sb.AppendLine("        function PrintTable(title,layout,strHtml) {");
  5.         sb.AppendLine("            LODOP = getLodop(document.getElementById('LODOP_OB'), document.getElementById('LODOP_EM'));");
  6.         sb.AppendLine("            LODOP.PRINT_INIT(title);");
  7.         sb.AppendLine("            LODOP.SET_PRINT_PAGESIZE(layout, 0, 0, "A4");");
  8.         sb.AppendLine("            LODOP.ADD_PRINT_HTML(" + top + ", " + left + ", " + width + ", " + height + ", strHtml);");
  9.         sb.AppendLine("            LODOP.PREVIEW();");
  10.         sb.AppendLine("        };");
  11.         sb.AppendFormat("PrintTable('{0}',{1},'{2}');", title, layout, HttpUtility.JavaScriptStringEncode(strHtml));
  12.         return sb.ToString();
  13. }

  14. protected void btnHello_Click(object sender, EventArgs e)
  15. {
  16.         var title = "NLodop打印demo";
  17.         var strHtml = "你好 FineUI!请等待1秒钟以上";
  18.         PageContext.RegisterStartupScript(NLodop.GetPrintHtmlJS(title, 1, "10", "15", ""96%"", "1050", strHtml));
  19. }
复制代码


最后分析这个问题可能是在IE8下弹出打印窗口时阻止了浏览器的JavaScript运行,导致关闭时出错。

最简单的修正方法只需加个延迟就行了:
将:
  1. sb.AppendFormat("PrintTable('{0}',{1},'{2}');", title, layout, HttpUtility.JavaScriptStringEncode(strHtml));
复制代码

修改为:
  1. sb.AppendFormat("window.setTimeout(function(){{PrintTable('{0}',{1},'{2}');}},100);", title, layout, HttpUtility.JavaScriptStringEncode(strHtml));
复制代码

即可!









欢迎光临 FineUI 官方论坛 (https://fineui.com/BBS/) Powered by Discuz! X3.4