利用JS重写Cognos右键菜单的实现代码


Posted in Javascript onApril 11, 2010
<!--菜单样式--> 
<STYLE type=text/css> 
.cMenu { 
BORDER-RIGHT: #000000 1px solid; 
BORDER-TOP: #000000 1px solid; 
FONT-WEIGHT: normal; 
FONT-SIZE: 14px; 
VISIBILITY: hidden; 
BORDER-LEFT: #000000 1px solid; 
WIDTH: 150px; 
CURSOR: default; 
COLOR: #000000; 
LINE-HEIGHT: 20px; 
BORDER-BOTTOM: #000000 1px solid; 
FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; 
POSITION: absolute; 
BACKGROUND-COLOR: #eeeeff 
} 
.menuitems { 
PADDING-RIGHT: 5px; 
PADDING-LEFT: 5px 
} 
</STYLE> 
<DIV class=cMenu id="contextMenu" onmouseover=highLightMenu() onmouseout=lowLightMenu()> 
<DIV class=menuitems clickcall="alert('查看历史执行情况');">查看历史执行情况</DIV> 
<DIV class=menuitems clickcall="alert('查看批注');">查看批注</DIV> 
<DIV class=menuitems clickcall="alert('插入/修改批注');">插入/修改批注</DIV> 
<HR color=#aaaaaa size="0"> 
<DIV class=menuitems clickcall="alert('关于');">关于</DIV> 
</DIV> 
<SCRIPT type="text/javascript"> 
var contextMenu = document.getElementById("contextMenu"); 
function getObjectName() 
{ 
return document.getElementById("cv.id").value; 
} 
function getRVContent() 
{ 
var objName = getObjectName(); 
return eval("document.getElementById('RVContent" + objName + "');"); 
} 
function overWriteRightClick()//重写弹出菜单 
{ 
var objName = getObjectName(); 
eval("oCV" + objName + ".rvMainWnd.displayContextMenu = displayContextMenu;"); 
} 
function disableRightClick() 
{ 
var objName = getObjectName(); 
eval("oCV" + objName + ".bCanUseCognosViewerContextMenu = false;"); 
} 
/* 菜单相关函数 start*/ 
function displayContextMenu(evt) { 
evt = (evt) ? evt : ((event) ? event : null); 
hideContextMenu(); 
var rightedge = getRVContent().clientWidth - evt.clientX; 
var bottomedge = getRVContent().clientHeight - evt.clientY; 
if (rightedge < contextMenu.offsetWidth) 
contextMenu.style.left = getRVContent().scrollLeft + evt.clientX - contextMenu.offsetWidth - getRVContent().offsetLeft; 
else 
contextMenu.style.left = getRVContent().scrollLeft + evt.clientX - getRVContent().offsetLeft; 
if (bottomedge < contextMenu.offsetHeight) 
contextMenu.style.top = getRVContent().scrollTop + evt.clientY - contextMenu.offsetHeight - getRVContent().offsetTop; 
else 
contextMenu.style.top = getRVContent().scrollTop + evt.clientY - getRVContent().offsetTop; 
contextMenu.style.visibility = "visible"; 
return false; 
} 
function hideContextMenu() { 
var object = event.srcElement; 
contextMenu.style.visibility = "hidden"; 
if (object.className == "menuitems") { 
eval(object.clickcall); 
} 
} 
function highLightMenu() { 
var object = event.srcElement; 
if (object.className == "menuitems") { 
object.style.backgroundColor = "highlight"; 
object.style.color = "white"; 
} 
} 
function lowLightMenu() { 
var object = event.srcElement; 
if (object.className == "menuitems") { 
object.style.backgroundColor = ""; 
object.style.color = "black"; 
} 
} 
/*菜单相关函数 end*/ 
overWriteRightClick(); 
document.body.onclick = hideContextMenu; 
</SCRIPT>

下面我来着介绍一下这段代码,前面的style和div主要是定义菜单的现实样式,其中引用样式为menuitems的div中有个clickcall属性,这个属性就是当点击此菜单项时调用的JS函数,可以将其改为自己的函数,我这里只是简单的调用了个alert。
getObjectName函数中有个cv.id的对象,之前也有人问过这个问题,“cv.id”是干什么用的?cognos报表在ReportStudio运行生成的对象和用URL请求生成的对象名称是不一样的,但是有规律可循,比如利用ReportStudio运行生成的报表中CognosViewer的对象名为oCVRS,而用URL请求生成的cognosViewer对象名为oCV_NS_,大家可以查看两次运行结果的源文件来进行比较,就比较直观了。发现前缀都一样(oCV)只是后面“RS”和“_NS_”不同,页面中很多对象都是用的此规则,而cv.id存储到正是后缀。这样就可以拼凑出当前运行模式下的对象名了。
getRVContent函数获取的是id为RVContent_NS_或RVContentRS的DIV对象,RVContent是展现用ReportStudio定义报表的内容,不包含CognosViewer工具栏和标题栏。
overWriteRightClick函数是将cognos右键调用的函数改为自己定义的函数。
disableRightClick函数已经说过了,禁用右键菜单。
displayContextMenu、hideContextMenu、highLightMenu、lowLightMenu这几个函数都是和菜单操作先关的,可以根据实际要求进行改造。
效果图如下:
利用JS重写Cognos右键菜单的实现代码
Javascript 相关文章推荐
ExtJS下grid的一些属性说明
Dec 13 Javascript
javascript学习笔记(二) js一些基本概念
Jun 18 Javascript
js根据日期判断星座的示例代码
Jan 23 Javascript
jQuery和JavaScript节点插入元素的方法对比
Nov 18 Javascript
基于canvas的二维码邀请函生成插件
Feb 14 Javascript
详解vue的diff算法原理
May 20 Javascript
详解Angular6 热加载配置方案
Aug 18 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
Sep 26 Javascript
vue中使用codemirror的实例详解
Nov 01 Javascript
详解ES6中的 Set Map 数据结构学习总结
Nov 06 Javascript
vue 解决路由只变化参数页面组件不更新问题
Nov 05 Javascript
vue实现动态给id赋值,点击事件获取当前点击的元素的id操作
Nov 09 Javascript
可以将word转成html的js代码
Apr 11 #Javascript
jquery 表格分页等操作实现代码(pagedown,pageup)
Apr 11 #Javascript
jquery 模拟雅虎首页的点击对话框效果
Apr 11 #Javascript
url 编码 js url传参中文乱码解决方案
Apr 11 #Javascript
jquery学习笔记二 实现可编辑的表格
Apr 09 #Javascript
jquery 图片截取工具jquery.imagecropper.js
Apr 09 #Javascript
跟着JQuery API学Jquery 之三 筛选
Apr 09 #Javascript
You might like
再Docker中架设完整的WordPress站点全攻略
2015/07/29 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
2019/04/02 PHP
解决在laravel中auth建立时候遇到的问题
2019/10/15 PHP
JavaScript Date对象使用总结
2009/05/14 Javascript
Js 刷新框架页的代码
2010/04/13 Javascript
JavaScript入门之基本函数详解
2011/10/21 Javascript
jquery获取焦点和失去焦点事件代码
2013/04/21 Javascript
JS去掉第一个字符和最后一个字符的实现代码
2014/02/20 Javascript
基于socket.io和node.js搭建即时通信系统
2014/07/30 Javascript
jquery实现点击页面计算点击次数
2015/01/23 Javascript
快速学习JavaScript的6个思维技巧
2015/10/13 Javascript
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
2015/11/09 Javascript
EasyUi combotree 实现动态加载树节点
2016/04/01 Javascript
js实现返回顶部效果
2017/03/10 Javascript
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
2018/05/26 jQuery
Vue实现todolist删除功能
2018/06/26 Javascript
jQuery无冲突模式详解
2019/01/17 jQuery
手把手教你 CKEDITOR 4 实现Dialog 内嵌 IFrame操作详解
2019/06/18 Javascript
vue组件命名和props命名代码详解
2019/09/01 Javascript
[07:40]DOTA2每周TOP10 精彩击杀集锦vol.4
2014/06/25 DOTA
[39:19]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第二场 11.26
2020/11/30 DOTA
python笔记(2)
2012/10/24 Python
分析python服务器拒绝服务攻击代码
2014/01/16 Python
详解python中requirements.txt的一切
2017/03/03 Python
Python简单定义与使用二叉树示例
2018/05/11 Python
Python3字符串encode与decode的讲解
2019/04/02 Python
树莓派升级python的具体步骤
2020/07/05 Python
深入浅析Python代码规范性检测
2020/07/31 Python
Python爬虫实现自动登录、签到功能的代码
2020/08/20 Python
Python-split()函数实例用法讲解
2020/12/18 Python
新西兰Bookabach:查找全球度假屋
2020/12/03 全球购物
学习十八大报告感言
2014/02/04 职场文书
幼儿园儿童节主持词
2014/03/21 职场文书
中层干部竞聘演讲稿
2014/05/15 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
2022/03/16 Redis