WebClientUI自带打印按钮,按Ctrl+P即可生成新页面进行打印。如下所示。您可以看到该页面上的所有超链接已被删除。该页面的生成逻辑如下。1、按住ctrl+p后,会触发WebClientUI框架的按键响应函数thtmlbKeyDown。浏览器传入的事件处理对象中的ctrl属性为true,keycode为80(p键对应的code),表示ctrl和p同时按下。响应函数thtmlbKeyDown注册在整个文档对象上,所以在页面任意位置点击ctrl+p时都能得到响应。从右上角的调用栈可以发现调用了crmFrwPrint。crmFrwPrint将打开位于BSP应用程序bspwd_basics中的print.do控制器。2、打开print.do控制器的实现类CL_BSPWD_BASICS_PRINT。该控制器将打开print.html页面。3、我们按ctrl+p后生成的页面内容是在print.html中生成的。核心代码在函数ppStartScripts中,它是通过thtmlbRegisterOnLoad注册在页面的load事件中的,也就是说在print.html加载完成的时候会执行。thtmlUtil.addEventHandler是SAP自己封装的事件注册函数,用于多浏览器兼容支持。两个核心函数:CreateShield生成一个高宽为100%的div,背景图片设置为SAP预定义的1x1.gif。运行时显示如下:loadPage通过window.opener获取到按下ctrl+p键的原始页面,然后直接将th-l-wcsubheadercontainer下所有元素的html复制到打印输出的header元素中页。这样,原始页面的内容就被移动到了打印输出页面上。然后获取打印页面上所有的超链接标签,然后将这些标签的href和onclick设置为一个函数体为returnfalse的函数,这样超链接就不能再被点击了。varnirvana=newFunction("返回false;");
