CRM WebClient UI的瀏覽器打印實現

WebClient UI上自帶了一個打印按鈕,按Ctrl + P後能夠生成一個新的頁面供打印。javascript

以下圖所示。能夠看到這個頁面裏全部的超連接都已經被移除了。html

這個頁面的生成邏輯以下。java

1. 按住ctrl + p以後,會觸發WebClient UI框架的按鍵響應函數thtmlbKeyDown。瀏覽器傳入的事件處理對象裏ctrl屬性爲true,keycode爲80(按鍵p對應的code),意思就是ctrl和p同時按下。瀏覽器

這個響應函數thtmlbKeyDown被註冊到整個document對象上,所以您在頁面任何位置點擊ctrl+p都能獲得響應。框架

從右上角的調用棧能發現crmFrwPrint被調用。crmFrwPrint會打開print.do這個控制器,位於BSP應用bspwd_basics裏。函數

2. 打開print.do控制器的實現類CL_BSPWD_BASICS_PRINTcode

這個控制器會打開print.html頁面htm

3. 咱們按了ctrl+p後生成的頁面的內容就是在print.html裏生成的。核心代碼在函數ppStartScripts裏,被thtmlbRegisterOnLoad註冊到頁面的load事件裏,意思是print.html加載時就執行。對象

thtmlUtil.addEventHandler就是SAP本身封裝的事件註冊函數,用於多瀏覽器的兼容支持。blog

最核心的兩個函數:

CreateShield

生成一個height和width爲100%的div,背景圖片設置成SAP預約義好的1x1.gif。

運行時顯示以下:

loadPage

經過window.opener拿到發生了ctrl+p按鍵的原始頁面,而後把其th-l-wcsubheadercontainer下面的全部元素的html直接複製到打印輸出頁面的header元素下面。

這樣就實現了把原始頁面的內容搬到了打印輸出頁面。

而後獲得打印頁面全部超連接標籤,而後把這些標籤的href和onclick都置爲一個函數體爲return false的函數,這樣超連接就再也不能點擊。

var nirvana = new Function ( "return false;" );

要獲取更多Jerry的原創技術文章,請關注公衆號"汪子熙"或者掃描下面二維碼:

相關文章
相關標籤/搜索