FineUI 官方论坛
标题:
同一个页面使用FineUI控件与打印组件Lodop
[打印本页]
作者:
sanshi
时间:
2013-11-17 20:50
标题:
同一个页面使用FineUI控件与打印组件Lodop
前几天,网友
⑥阿太⑥
在使用FineUI和打印组件 Lodop时遇到一个问题,在IE8下,每次调用完Lodop结束后会出现如下错误:
[attach]3671[/attach](弹出打印窗口时不会出错)
[attach]3672[/attach]
(关闭打印窗口时出错)
并且这个问题在IE9,Firefox,Chrome中都没出现。
前台代码:
<form id="form1" runat="server">
<x:PageManager ID="PageManager1" runat="server" />
<x:Button Text="点击弹出对话框" runat="server" ID="btnHello" OnClick="btnHello_Click">
</x:Button>
</form>
复制代码
后台代码:
public static string GetPrintHtmlJS(string title, int layout, string top, string left, string width, string height, string strHtml)
{
var sb = new StringBuilder();
sb.AppendLine(" function PrintTable(title,layout,strHtml) {");
sb.AppendLine(" LODOP = getLodop(document.getElementById('LODOP_OB'), document.getElementById('LODOP_EM'));");
sb.AppendLine(" LODOP.PRINT_INIT(title);");
sb.AppendLine(" LODOP.SET_PRINT_PAGESIZE(layout, 0, 0, "A4");");
sb.AppendLine(" LODOP.ADD_PRINT_HTML(" + top + ", " + left + ", " + width + ", " + height + ", strHtml);");
sb.AppendLine(" LODOP.PREVIEW();");
sb.AppendLine(" };");
sb.AppendFormat("PrintTable('{0}',{1},'{2}');", title, layout, HttpUtility.JavaScriptStringEncode(strHtml));
return sb.ToString();
}
protected void btnHello_Click(object sender, EventArgs e)
{
var title = "NLodop打印demo";
var strHtml = "你好 FineUI!请等待1秒钟以上";
PageContext.RegisterStartupScript(NLodop.GetPrintHtmlJS(title, 1, "10", "15", ""96%"", "1050", strHtml));
}
复制代码
最后分析这个问题可能是在IE8下弹出打印窗口时阻止了浏览器的JavaScript运行,导致关闭时出错。
最简单的修正方法只需加个延迟就行了:
将:
sb.AppendFormat("PrintTable('{0}',{1},'{2}');", title, layout, HttpUtility.JavaScriptStringEncode(strHtml));
复制代码
修改为:
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