需求背景
由于客户系统中的数据比较敏感,避免泄漏出去,故提出禁止复制粘贴的功能(针对各个类型的报表)。
实现方案
通过宏资源包的形式实现,针对每个类型报表添加一个宏资源包
以下宏在IE,google,火狐浏览器下测试基本上都可以正常使用
电子表格宏
类型:ClientSide(客户端宏) 对象:spreadsheetReport 事件:onRender
代码块 |
---|
function main(spreadsheetReport) { preventContextMenu(spreadsheetReport.elemSheetFrame); } //设置所有iframe禁止复制粘贴 function preventContextMenu(iframe) { //获取iframe的Document对象 var doc = iframe.contentWindow.document; //获取IFRAME标签 var list = doc.getElementsByTagName("IFRAME"); for (var i = 0; i < list.length; i++) { var subIFrame = list[i]; preventContextMenu(subIFrame); subIFrame.onload = function() { preventContextMenu(subIFrame); }; }; setTimeout(function() { //设置右键触发事件 doc.documentElement.oncontextmenu = doc.body.oncontextmenu = function() { return false; //禁止鼠标右键 }; }, 200); //按下键盘按键后触发 doc.onkeydown = function(e) { var ev = e || window.event; if (ev && ev.ctrlKey && ev.keyCode == 67) { // Ctrl + C return false; }else if (ev && ev.ctrlKey && ev.keyCode == 86) { // Ctrl + V return false; }else if (ev && ev.ctrlKey && ev.keyCode == 45) { // Ctrl +insert return false; } }; //拖拽或选择文本时触发 doc.ondragstart = function() { return false; //禁止拖拽 }; } |
灵活分析宏
类型:ClientSide(客户端宏) 对象:simpleReport 事件:onRender
代码块 | ||||
---|---|---|---|---|
| ||||
function main(simpleReport, simpleReportContext) { //获取Document对象 var doc = simpleReport.content.ownerDocument; //设置右键触发事件 doc.documentElement.oncontextmenu = doc.body.oncontextmenu = function() { return false; //禁止鼠标右键 }; //按下键盘按键后触发 doc.onkeydown = function(e) { var ev = e || window.event; if (ev && ev.ctrlKey && ev.keyCode == 67) { // Ctrl + C return false; }else if (ev && ev.ctrlKey && ev.keyCode == 45){// Ctrl +insert return false; } }; //拖拽或选择文本时触发 doc.ondragstart = function() { return false; //禁止拖拽 }; } |
组合分析宏
类型:ClientSide(客户端宏) 对象:simpleReport 事件:onRender
代码块 | ||||
---|---|---|---|---|
| ||||
function main(simpleReport, simpleReportContext) { //获取Document对象 var doc = simpleReport.content.ownerDocument; //设置右键触发事件 doc.documentElement.oncontextmenu = doc.body.oncontextmenu = function() { return false; //禁止鼠标右键 }; //按下键盘按键后触发 doc.onkeydown = function(e) { var ev = e || window.event; if (ev && ev.ctrlKey && ev.keyCode == 67) { // Ctrl + C return false; }else if (ev && ev.ctrlKey && ev.keyCode == 45){// Ctrl +insert return false; } }; //拖拽或选择文本时触发 doc.ondragstart = function() { return false; //禁止拖拽 }; } |
c宏
类型:ClientSide(客户端宏) 对象:INSIGHT 事件:onRender
代码块 | ||||
---|---|---|---|---|
| ||||
function main(insight) { //获取页面的Ducument对象 var doc = insight.container.ownerDocument; //设置右键触发事件 doc.documentElement.oncontextmenu = doc.body.oncontextmenu = function() { return false; //禁止鼠标右键 }; //按下键盘按键后触发 doc.onkeydown = function(e) { var ev = e || window.event; if (ev && ev.ctrlKey && ev.keyCode == 67) { // Ctrl + C return false; }else if (ev && ev.ctrlKey && ev.keyCode == 45){// Ctrl +insert return false; } }; //拖拽或选择文本时触发 doc.ondragstart = function() { return false; //禁止拖拽 }; } |
多维分析宏
类型:ClientSide(客户端宏) 对象:olapQuery 事件:onRender
代码块 | ||||
---|---|---|---|---|
| ||||
function main(olapQuery) { //获取当前Document对象 var doc = olapQuery.frameViewContainer.ownerDocument; //设置右键触发事件 doc.documentElement.oncontextmenu = doc.body.oncontextmenu = function() { return false; //禁止鼠标右键 }; //按下键盘按键后触发 doc.onkeydown = function(e) { var ev = e || window.event; if (ev && ev.ctrlKey && ev.keyCode == 67) { // Ctrl + C return false; }else if (ev && ev.ctrlKey && ev.keyCode == 45){// Ctrl +insert return false; } }; //拽或选择文本时触发 doc.ondragstart = function() { return false; //禁止拖拽 }; } |
页面宏
类型:ClientSide(客户端宏) 对象:page 事件:onRenderPage
代码块 | ||||
---|---|---|---|---|
| ||||
function main(page, pageContext) { //右键点击触发 document.documentElement.oncontextmenu = document.body.oncontextmenu = function() { return false; //禁止鼠标右键 }; //键盘按下后触发 document.onkeydown = function(e) { var ev = e || window.event; if (ev && ev.ctrlKey && ev.keyCode == 67) { // Ctrl + C return false; } else if (ev && ev.ctrlKey && ev.keyCode == 45) { // Ctrl +insert return false; } }; //拖拽或选择文本时触发 document.ondragstart = function() { return false; //禁止拖拽 }; var pList = page.dashletList; for (var i = 0; i < pList.length; i++) { var dashletType = pList[i].dashletType; if (dashletType == "SPREADSHEET_REPORT") { spreadsheetReport = pList[i].currentPortlet.queryCmd.spreadsheetReport; spreadsheetReport.onAfterRefresh.subscribe(function(spreadsheetReport) { var doc = spreadsheetReport.elemSheetFrame.contentWindow.document; //右键点击触发 doc.documentElement.oncontextmenu = doc.body.oncontextmenu = function() { return false; //禁止鼠标右键 }; //键盘按下后触发 doc.onkeydown = function(e) { var ev = e || window.event; if (ev && ev.ctrlKey && ev.keyCode == 67) { // Ctrl + C return false; } }; //键盘按下后触发 doc.ondragstart = function() { return false; //禁止拖拽 }; }); } } } |
资源下载
报表资源:migrate.xml