利用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 相关文章推荐
改变javascript函数内部this指针指向的三种方法
Apr 23 Javascript
javascript学习笔记(六) Date 日期类型
Jun 19 Javascript
JQuery操作元素的css样式
Mar 09 Javascript
jQuery插件jRumble实现网页元素抖动
Jun 05 Javascript
浅谈JavaScript中的Math.atan()方法的使用
Jun 14 Javascript
jQuery新窗口打开外链接
Jul 21 Javascript
Node调用Java的示例代码
Sep 20 Javascript
JavaScript中关于class的调用方法
Nov 28 Javascript
javaScript中的空值和假值
Dec 18 Javascript
实例讲解JS中pop使用方法
Jan 27 Javascript
jQuery--遍历操作实例小结【后代、同胞及过滤】
May 22 jQuery
基于JavaScript实现年月日三级联动
Jun 22 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
PHP如何抛出异常处理错误
2011/03/02 PHP
php打开远程文件的方法和风险及解决方法
2013/11/12 PHP
jQuery 源代码显示控件 (Ajax加载方式).
2009/05/18 Javascript
JavaScript 学习笔记(十三)Dom创建表格
2010/01/21 Javascript
JQuery Tab选项卡效果代码改进版
2010/04/01 Javascript
jquery实现图片左右间隔滚动特效(可自动播放)
2013/05/08 Javascript
JavaScript获取和设置CheckBox状态的简单方法
2013/07/05 Javascript
javascript对下拉列表框(select)的操作实例讲解
2013/11/29 Javascript
使用CSS样式position:fixed水平滚动的方法
2014/02/19 Javascript
javascript学习笔记--数字格式类型
2014/05/22 Javascript
14款NodeJS Web框架推荐
2014/07/11 NodeJs
jQuery实现的超酷苹果风格图标滑出菜单效果代码
2015/09/16 Javascript
JS操作XML实例总结(加载与解析XML文件、字符串)
2015/12/08 Javascript
js判断当前页面在移动设备还是在PC端中打开
2016/01/06 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(一)
2016/05/17 Javascript
微信小程序前端源码逻辑和工作流
2016/09/25 Javascript
React学习笔记之条件渲染(一)
2017/07/02 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
2017/09/11 Javascript
微信小程序 POST请求的实例详解
2017/09/29 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
详解各版本React路由的跳转的方法
2018/05/10 Javascript
es6基础学习之解构赋值
2018/12/10 Javascript
解决vue-cli webpack打包开启Gzip 报错问题
2019/07/24 Javascript
[01:30:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第二场 2月2日
2021/03/11 DOTA
Python黑魔法@property装饰器的使用技巧解析
2016/06/16 Python
Python GUI Tkinter简单实现个性签名设计
2018/06/19 Python
python监测当前联网状态并连接的实例
2018/12/18 Python
使用Python FastAPI构建Web服务的实现
2020/06/08 Python
python基于pexpect库自动获取日志信息
2021/02/01 Python
阿根廷旅游网站:almundo阿根廷
2018/02/12 全球购物
乡下人家教学反思
2014/02/01 职场文书
《小石潭记》教学反思
2014/02/13 职场文书
《悲惨世界》:比天空更广阔的是人的心灵
2020/01/16 职场文书
Golang 对es的操作实例
2022/04/20 Golang
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
2022/06/01 Java/Android
在SQL Server中使用 Try Catch 处理异常的示例详解
2022/07/15 SQL Server