最近要做一个网页打印程序,为了不使页面发生跳转,就想到用window.showModelessDialog()来实现打印功能。但是问题来了,showModelessDialog打开的新窗口里面不让打印,提示脚本错误。我用的打印控件是WebBrowser,包括打印预览,设置和打印都不行。后来在网上搜索也没有好的解决方案。今天苦思冥想终于成功了,贴出来给大家分享一下。
首先,在点击打印按钮之后,调用showModelessDialog跳转到另一个页面A.html,showModelessDialog可以带上相关的参数。这里还要补充一个知识点,那就是showModelessDialog跳转之后子窗口获取父窗口参数的问题。我们可以在子窗口使用window.dialogArguments来获取参数,它默认是获取url后第一个参数的值,如果要获取多个参数,可以用逗号分隔,然后在子页面用split去解析就是了。
然后,虽然已经通过showModelessDialog打开了一个新窗口A.html,但却打印不了A.html的任何内容。我的做法就是再继续跳转。用window.open(),再打开一个B.html页面,所有的打印功能将在B.html里面完成。记住一点,为了不使用户感觉弹出了两个窗口,在open()之后需要关闭当前窗口,当然直接用window.close()就可以了。如此一来,打印功能就解决了。关键的秘诀就是两次跳转。下面我贴出相关代码:
function print(obj){
var parent = window.parent;
var id = obj.id;
var webbrower = document.getElementById('WebBrowser');
var url="/recharge_for_agents/JSP/front/charge/chargePrint.jsp?random="+Math.random();
parent.showModelessDialog(url,id,"dialogHeight=300px,dialogWidth=200px,dialogLeft=0,dialogTop=0,status=no,resizable=yes");
}
这是第一步,也就是点完打印按钮之后应该进行的操作。
var id = window.dialogArguments;
var url = "/recharge_for_agents/JSP/front/charge/realprint.jsp?id="+id;
window.open(url,"弹出窗口","height=300px,top=0,left=0,width=200px,status=no,toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=no");
window.close();
这是第二步,也就是上面提到的A.html。由于该页面本身不能打印任何东西,所以在这里我们有进行了第二次跳转而且跳转之后马上关闭当前窗口,所以你就感觉不到我打开了两个新的窗口。
function printPre(){
document.all.WebBrowser.ExecWB(7,1);
}
function printSet(){
document.all.WebBrowser.ExecWB(8,1);
}
function print(){
document.all.WebBrowser.ExecWB(6,6);
}
<object id="WebBrowser" classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 width=0></object>
这是真正的打印页面,使用的是WebBrowser控件。至此打印就OK了!
分享到:
相关推荐
- `dialogHide`:在打印或打印预览时是否隐藏对话框,默认为否。 - `edge`:对话框边框样式,默认为`raised`。 - `unadorned`:是否去除装饰,默认为否。 **示例:** 以下是一个简单的例子,展示了如何使用`...
- **dialogHide**:{ yes | no | 1 | 0 | on | off } [用于HTA],在打印或打印预览时是否隐藏对话框,默认no。 - **edge**:{ sunken | raised },对话框边框样式,默认为raised。 - **unadorned**:{ yes | no...
10. **dialogHide**: 在打印预览或打印时是否隐藏对话框,默认为`no`。 11. **edge**: 边框样式,默认为`raised`。 12. **unadorned**: 是否不装饰对话框,默认为`no`。 13. **Minimize**: 是否显示最小化按钮,默认...
### JS中的`showModalDialog`与`showModelessDialog`...综上所述,`showModalDialog` 和 `showModelessDialog` 提供了在Internet Explorer中创建弹出对话框的强大功能,但在实际项目中需要注意其局限性和兼容性问题。
msgFrm.showModelessDialog("javascript:alert(\""+msg+"\");window.close();","",sfeature); setTimeout("msgFrm.location.reload();",timeLong); }catch(e){ alert(msg); } } 这种方法可以在一定时间后自动...
Javascript小技巧一箩筐 事件源对象 event.srcElement.tagName event.srcElement.type ... 捕获释放 event.srcElement.setCapture();...event.srcElement.releaseCapture();... 根据鼠标获得元素: document....
- `dialogHide`:打印或打印预览时是否隐藏对话框,仅对被信任的程序可用,默认为`no`。 - `edge`:设定对话框边框样式,凹下或凸起,默认为`raised`。 - `help`:是否显示帮助图标,默认为`yes`。 - `resizable...
138.如何解决用showModelessDialog弹出新窗口的问题 140.如何强制刷新网页 141.如何吸取网页上的颜色 142.如何将RGB值转换成十六进制值 第9章 使用XML 143.如何创建和显示一个XML文档(示例一) 143.如何创建和...
- `window.print()`:打开打印对话框,允许用户打印当前页面。 - `window.close()`:关闭当前窗口。 - `window.stop()`:停止当前正在加载的页面。 - `window.location.reload()`、`history.go(0)`:刷新当前...
window.showModelessDialog("about:blank", "", "dialogWidth:1px;dialogheight:1px"); return false; } } ``` 8. **屏蔽打印**: 通过CSS媒体查询`@media print`,可以设置所有元素在打印时不显示: ```...
这个标题强调了文档内容是关于JavaScript学习的重要资源,适合从入门到精通不同阶段的学习者。 ### 描述:“该资料中包含大量实例,入门到精通,新手好入门,高手能提高!绝对是好东西,值得下载学习。” 描述部分...
23. **打印**:`window.print()`启动浏览器的打印功能。 24. **提示输入框**:`window.prompt(message, defaultReply)`显示一个让用户输入文本的对话框,`defaultReply`是默认输入值。 25. **滚动条**:`window....