none
关于js的window.print();的讨论 RRS feed

  • 问题

  • 新建一个.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%">
              &nbsp;
            </td>
          </tr>
          <tr align="center">
            <td height="35" colspan="3">
              <asp:Button ID="btQuDing" runat="server" Text="确定" OnClientClick="return CheckYj();"
                OnClick="btQuDing_Click" />&nbsp;&nbsp;&nbsp;&nbsp;<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>
    
    

     

    2010年12月25日 1:05

答案

  • 框架集也是也可以的。

    test.htm

    <frameset rows="100,*">
    <frame src="b.htm" />
    <frame src="c.htm" />
    </frameset>

     

    b.htm

    <script>
    window.print();
    </script>

     

    你要搞清楚,是你的aspx代码错误还是windiw.print的功能问题。以上代码 ie9.firefox,safari,chrome都是支持的.opera需要一点点延时


    【孟子E章】
    • 已标记为答案 m s 2011年1月7日 10:31
    2011年1月5日 6:29
    版主
  • 您好,右击帧结构集中的每个页面的空白处,然后把每个页面得源代码copy出来。

    在本地创建相应的结构,以排除服务器代码的影响。然后再找找原因。

    • 已标记为答案 m s 2011年1月7日 10:31
    2011年1月5日 12:06

全部回复

  •   <script type="text/javascript">
        //<![CDATA[
       doPrint(); window.print(); alert("helloworld"); 

    //]]>
      </script>


    【孟子E章】
    2010年12月27日 9:51
    版主
  • 不起作用

    2010年12月28日 1:01
  • 下面的代码不起作用?

    <script type="text/javascript">
     window.print();
      </script>


    【孟子E章】
    2010年12月28日 1:05
    版主
  • 这个页面这句话不起作用,新建一个页面就可以

    在这个页面里,如果不写这句,网页正常显示

    如果写这句,网页也正常显示,只是多出来一个横的滚动条和竖的滚动条,不弹出打印选项卡

    我在IE8用调试脚本工具看了一下,打印工作好像是调用了ieframe.dll和preview.js才完成了,

    正常页面能弹出打印选项卡,也执行ieframe.dll和preview.js

    但这个页面不弹出打印选项卡,也不执行ieframe.dll和preview.js

    2010年12月28日 10:16
  • 你好,

    我拷贝你的代码做了一下测试,去掉了部份后台执行相关的代码,打印选项是正常的。这个页面的代码,因为调用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.

    2010年12月30日 10:31
    版主
  • 你好,你是正确的,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>

    2010年12月31日 6:10
  • 你好,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>

    2010年12月31日 6:13
  • 你好,

    使用框架页后,打印功能仍然正常,弹出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.

    2011年1月4日 5:59
    版主
  • 这个页面这句话不起作用,新建一个页面就可以

    在这个页面里,如果不写这句,网页正常显示

    如果写这句,网页也正常显示,只是多出来一个横的滚动条和竖的滚动条,不弹出打印选项卡

    我在IE8用调试脚本工具看了一下,打印工作好像是调用了ieframe.dll和preview.js才完成了,

    正常页面能弹出打印选项卡,也执行ieframe.dll和preview.js

    但这个页面不弹出打印选项卡,也不执行ieframe.dll和preview.js


    说明你的代码其他部分有错误,导致下面的js 无法执行

    window.print()是任何浏览器都支持的标准功能,早在浏览器诞生时都有了,你不用怀疑这个


    【孟子E章】
    2011年1月5日 1:10
    版主
  • 这个页面这句话不起作用,新建一个页面就可以

    在这个页面里,如果不写这句,网页正常显示

    如果写这句,网页也正常显示,只是多出来一个横的滚动条和竖的滚动条,不弹出打印选项卡

    我在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>

    2011年1月5日 6:21
  • 框架集也是也可以的。

    test.htm

    <frameset rows="100,*">
    <frame src="b.htm" />
    <frame src="c.htm" />
    </frameset>

     

    b.htm

    <script>
    window.print();
    </script>

     

    你要搞清楚,是你的aspx代码错误还是windiw.print的功能问题。以上代码 ie9.firefox,safari,chrome都是支持的.opera需要一点点延时


    【孟子E章】
    • 已标记为答案 m s 2011年1月7日 10:31
    2011年1月5日 6:29
    版主
  • 您好,右击帧结构集中的每个页面的空白处,然后把每个页面得源代码copy出来。

    在本地创建相应的结构,以排除服务器代码的影响。然后再找找原因。

    • 已标记为答案 m s 2011年1月7日 10:31
    2011年1月5日 12:06