积极答复者
关于js的window.print();的讨论

问题
-
新建一个.aspx页面,在后台使用ClientScript.RegisterStartupScript(this.GetType(), "打印", "window.print();", true);,能够调出打印机,进行打印,我在IE8用调试脚本工具看了一下,打印工作好像是调用了ieframe.dll和preview.js才完成了
但我在下面的页面,不论是后台用ClientScript.RegisterStartupScript(this.GetType(), "打印", "window.print();", true);,还是在前台直接使用js打印,都不起作用,我在IE8用调试脚本工具看了一下,也没有执行ieframe.dll和preview.js,我觉得是因为没有执行ieframe.dll和preview.js导致不能打印,但我不知道原因是什么,下面贴出代码,供大家参考
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="sqb_all.aspx.cs" Inherits="njgzbt.ApplicationProcess.sqb_all" %> <html> <head runat="server"> <script type="text/javascript" language="javascript"> function doPrint() { // PageSetup_Null(); // bdhtml = window.document.body.innerHTML; // sprnstr = "<!--startprint-->"; // eprnstr = "<!--endprint-->"; // prnhtml = bdhtml.substring(bdhtml.indexOf(sprnstr) + 17); // prnhtml = prnhtml.substring(0, prnhtml.indexOf(eprnstr)); // window.document.body.innerHTML = prnhtml; window.print(); } </script> </head> <body> <form id="form1" runat="server"> <table> <tr> <td align="right"> <div id="divBt" runat="server"> <asp:HiddenField ID="hidMess" runat="server" /> </div> </td> <td align="left"> <asp:DropDownList ID="DropDownList1" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="true"> <asp:ListItem Value="0">全部</asp:ListItem> <asp:ListItem Value="1">申请表</asp:ListItem> <asp:ListItem Value="2">协议书</asp:ListItem> <asp:ListItem Value="3">协议书附表</asp:ListItem> </asp:DropDownList> <asp:Button ID="btChaKanYiJian" runat="server" CssClass="buttonAllRight" Text="查看审批意见" OnClientClick="return showMess();" /> <asp:Button ID="btnFanhui" runat="server" CssClass="buttonAllRight" Text="返回" OnClick="btnFanhui_Click" /> <asp:Button ID="btnPrint" Visible="false" CssClass="buttonAllRight" runat="server" Text="打印" OnClientClick="javascript:doPrint();return false;" /> </td> </tr> </table> <!--startprint--> <div id="div1" runat="server" align="center"> <!--style="padding-left:100px;"--> </div> <!--endprint--> <div id="div4" style="position: absolute; left: 650px; top: 100px; width: 486px; height: 250px; z-index: 4; display: none;"> <img alt="图片" src=" " width="270" height="171" id="imge1" runat="server" /> </div> <div id="div5" style="position: absolute; left: 650px; top: 500px; width: 486px; height: 250px; z-index: 4; display: none;"> <img alt="图片" src=" " width="270" height="171" id="imge2" runat="server" /><img alt="图片" src=" " width="270" height="171" id="imge3" runat="server" /> </div> <div id="divyj" runat="server" style="position: absolute; width: 269px; height: 159px; z-index: 3; left: 450px; top: 202px; background-color: #0066FF; layer-background-color: #0066FF; border: 1px none #000000;" visible="false"> <table width="30%" border="0" style="background-color: #0066ff"> <tr> <td height="25" colspan="3"> 请输入原因: </td> </tr> <tr> <asp:HiddenField ID="hid1" runat="server" /> <td width="10%" height="91"> </td> <td width="90%"> <asp:TextBox ID="txtyj" runat="server" Columns="30" Rows="6" TextMode="MultiLine"></asp:TextBox> </td> <td width="10%"> </td> </tr> <tr align="center"> <td height="35" colspan="3"> <asp:Button ID="btQuDing" runat="server" Text="确定" OnClientClick="return CheckYj();" OnClick="btQuDing_Click" /> <asp:Button ID="btQuXiao" runat="server" Text="取消" OnClientClick="return CloseDiv();" /> </td> </tr> </table> </div> <script type="text/javascript"> //<![CDATA[ javascript: doPrint(); window.print(); alert("helloworld"); //]]> </script> </form> </body> </html>
- 已更改类型 LeoTangModerator 2011年1月4日 6:23
- 已更改类型 孟宪会Moderator 2011年1月5日 1:08
答案
全部回复
-
你好,
我拷贝你的代码做了一下测试,去掉了部份后台执行相关的代码,打印选项是正常的。这个页面的代码,因为调用doPrint(),又直接调用了window.print(),会导致代码执行两次。既然其他页面的打印功能是正常显示的,客户端的设定应该是正确的,建议你在调试脚本工具里面设置断点,查看一下代码执行的具体情况。
谢谢!
Leo Tang [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
-
你好,你是正确的,window.print()这句话没什么问题
同时我也找到原因了,是因为这个页面是在一个框架中,我不在框架中运行这个页面,window.print()可以发挥作用,
我在框架中运行这个页面,window.print()就失效了,但是目前我还没法解决
这个页面就在下面框架集中的right中加载
<frameset id="main" rows="87,*" frameborder="0" framespacing="0">
<frame name="topFrame" src="top.aspx" scrolling="no" />
<frameset id="qlsy" cols="180,11,*">
<frame name="left" src="left.aspx" />
<frame name="middle" src="middle.aspx" noresize />
<frame name="right" src="ApplicationProcess/sqb_all.aspx" />
</frameset>
</frameset> -
你好,window.print()在这个页面无效,在别的页面有效,可能是因为这个页面在框架中的原因
我测试了一下,我不在框架中运行这个页面,window.print()可以发挥作用,
我在框架中运行这个页面,window.print()就失效了,但是目前我还没法解决
这个页面就在下面框架集中的right中加载
<frameset id="main" rows="87,*" frameborder="0" framespacing="0">
<frame name="topFrame" src="top.aspx" scrolling="no" />
<frameset id="qlsy" cols="180,11,*">
<frame name="left" src="left.aspx" />
<frame name="middle" src="middle.aspx" noresize />
<frame name="right" src="ApplicationProcess/sqb_all.aspx" />
</frameset>
</frameset> -
你好,
使用框架页后,打印功能仍然正常,弹出hello world窗口后,显示打印选项窗口。如果你的问题依然存在,请把一个最小的能重现这个的问题的项目文件共享一下,方便我们更好的了解你的问题。
谢谢!
Leo Tang [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
-
这个页面这句话不起作用,新建一个页面就可以
在这个页面里,如果不写这句,网页正常显示
如果写这句,网页也正常显示,只是多出来一个横的滚动条和竖的滚动条,不弹出打印选项卡
我在IE8用调试脚本工具看了一下,打印工作好像是调用了ieframe.dll和preview.js才完成了,
正常页面能弹出打印选项卡,也执行ieframe.dll和preview.js
但这个页面不弹出打印选项卡,也不执行ieframe.dll和preview.js
说明你的代码其他部分有错误,导致下面的js 无法执行window.print()是任何浏览器都支持的标准功能,早在浏览器诞生时都有了,你不用怀疑这个
【孟子E章】 -
这个页面这句话不起作用,新建一个页面就可以
在这个页面里,如果不写这句,网页正常显示
如果写这句,网页也正常显示,只是多出来一个横的滚动条和竖的滚动条,不弹出打印选项卡
我在IE8用调试脚本工具看了一下,打印工作好像是调用了ieframe.dll和preview.js才完成了,
正常页面能弹出打印选项卡,也执行ieframe.dll和preview.js
但这个页面不弹出打印选项卡,也不执行ieframe.dll和preview.js
说明你的代码其他部分有错误,导致下面的js 无法执行window.print()是任何浏览器都支持的标准功能,早在浏览器诞生时都有了,你不用怀疑这个
【孟子E章】
你好,我再次测试发现是因为这个页面在框架中的原因
我测试了一下,我不在框架中运行这个页面,window.print()可以发挥作用,
我在框架中运行这个页面,window.print()就失效了,但是目前我还没法解决
这个页面就在下面框架集中的right中加载
<frameset id="main" rows="87,*" frameborder="0" framespacing="0">
<frame name="topFrame" src="top.aspx" scrolling="no" />
<frameset id="qlsy" cols="180,11,*">
<frame name="left" src="left.aspx" />
<frame name="middle" src="middle.aspx" noresize />
<frame name="right" src="ApplicationProcess/sqb_all.aspx" />
</frameset>
</frameset>