在修改一个项目时发现:
已有的使用“WebBrowser”的打印页面都正常,
但是,一旦我打开其中一个页面,即使只打个回车,再保存编译,则运行后,点击此页面的“打印预览”,系统报“没有权限”的错误。
而其他未动过的页面此时都正常。
重启,清缓存之后,错误依旧。又试了两个本来正常的页面,同样出现此问题。
请问,到底是什么原因?如何解决?
谢谢!

解决方案 »

  1.   

    WebBrowser是IE内置的浏览器控件,无需用户下载。本文档所讨论的是有关IE6.0版本的WebBrowser控件技术内容。其他版本的IE应该也支持。与其相关的技术要求有:打印文档的生成、页面设置、打印操作的实现等几个环节。本文以asp为例,但是他可以容易的移植到其他web技术中。 
      一、WebBrowser控件 
      <object ID='WebBrowser' WIDTH=0 HEIGHT=0 CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'></object>   二、WebBrowder控件的方法 
    //打印 WebBrowser1.ExecWB(6,1); //打印设置 WebBrowser1.ExecWB(8,1); //打印预览 WebBrowser1.ExecWB(7,1);   三、实现打印的设置,打印数据的生成,打印的预览,和打印。 
      实现打印的设置,打印数据的生成,打印的预览,和打印我一般这样做,假如查询结果在a.asp中,那么在a.asp中放置打印设置、打印预览、打印三个按钮。 
      单击打印设置按钮则在js中执行WebBrowser1.ExecWB(8,1),以打开打印设置窗口。 
      单击打印预览按钮则打开一个b.asp,在b.asp中重新生成打印数据,然后在b.asp中自动执行WebBrowser1.ExecWB(7,1),以打开用户预览界面。 
      单击打印按钮则也打开b.asp,在b.asp中重新生成打印数据,然后在b.asp中自动执行WebBrowser1.ExecWB(6,1),以自动打印数据。 
      四、代码 
      a.asp调用数据的程序就不给出了。只给出几个按钮的代码: 
      <input type=“button“ name=“mPrint“ value=“打印“ onclick=“exePrint();“> 
    <input type=“button“ name=“mPreview“ value=“打印预览“ onclick=“exePreview();“> 
    <input type=“button“ name=“mSetting“ value=“打印设置“ onclick=“exeSetting();“> <object ID='WebBrowser' WIDTH=0 HEIGHT=0 CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'></object> 
    <script language='javascript'> function exePrint() 
    { liu= window.open('b.asp?do=1','_blank','left=2000,top=2000,fullscreen=3'); 

    function exePreview() 

    window.open('b.asp?do=2','_blank','left=2000,top=2000,fullscreen=3'); 
    } function exeSetting() 

    WebBrowser.ExecWB(8,1); 

    </script> 
    代码中打印设置的代码很简单,大家很容易理解。打印预览和打印的按钮需要告诉b.asp我们将要执行的是打印还是打印预览。另外,还要将查询字符串传递过去。当然web高手可以尝试其他方法,以避免反复重服务器调数据,当然初学者只能通过多次查询,以牺牲性能来解决打印了。 
    假设本例中a.asp通过传递一个查询串打开了b.asp,则在b.asp中将重新载入数据。在这里载入数据后将数据显示在网页上需要知道每个页要显示多少条(PageSize)。显示的时候每显示PageSize条后,就要显示一个<p style='page-break-before:always;'> 这个语句相当于分页符,也就是当打印或者预览时遇到了这个分页符后会强制分页。一般我们可以这样: 
    <table> 
    ??? 
    </table> 
    <p style='page-break-before:always;'> 
    <table> 
    ??? 
    </table> 
    <p style='page-break-before:always;'> …… <table> 
    ??? 
    </table> 
    <p style='page-break-before:always;'> 显示完数据后根据用户的的指令(判断参数do的值),来分别执行预览或者打印。 
    如果是预览则执行下面代码: 
    WebBrowser.ExecWB(7,1); 
    window.opener=null; 
    window.close(); 
    如果是打印则执行: 
    WebBrowser.ExecWB(6,1); 
    window.opener=null; 
    window.close(); 
      

  2.   

    PrintView.Attributes.Add("onclick","document.all.WebBrowser.ExecWB(7,1);history.go(-1);");
    Print_Set.Attributes.Add("onclick","document.all.WebBrowser.ExecWB(8,1);history.go(-1);");
    Print.Attributes.Add("onclick","document.all.WebBrowser.ExecWB(6,1);history.go(-1);");上面的方法基本可以解决,只是有时用户需要点击两次,这是我目前发现的最好的解决办法了