利用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 相关文章推荐
js实现的切换面板实例代码
Jun 17 Javascript
使用js在页面中绘制表格核心代码
Sep 16 Javascript
讨论html与javascript在浏览器中的加载顺序问题
Nov 27 Javascript
jquery处理json对象
Nov 03 Javascript
jQuery中outerWidth()方法用法实例
Jan 19 Javascript
JavaScript操作URL的相关内容集锦
Oct 29 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
Dec 18 Javascript
学习使用bootstrap3栅格系统
Apr 12 Javascript
AngularJS 控制器 controller的详解
Oct 17 Javascript
解决Vue中mounted钩子函数获取节点高度出错问题
May 18 Javascript
vue interceptor 使用教程实例详解
Sep 13 Javascript
详解Vue demo实现商品列表的展示
May 07 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实现与erlang的二进制通讯实例解析
2014/07/23 PHP
Yii+MYSQL锁表防止并发情况下重复数据的方法
2016/07/14 PHP
jquery 简单导航实现代码
2009/09/11 Javascript
js实现右下角可关闭最小化div(可用于展示推荐内容)
2013/06/24 Javascript
js实现拉伸拖动iframe的具体代码
2013/08/03 Javascript
JS this作用域以及GET传输值过长的问题解决方法
2013/08/06 Javascript
详解JavaScript基本类型和引用类型
2015/12/09 Javascript
AngularJS HTML DOM详解及示例代码
2016/08/17 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
详解vue项目构建与实战
2017/06/27 Javascript
vue-cli项目中怎么使用mock数据
2017/09/27 Javascript
AngularJS日期格式化常见操作实例分析
2018/05/17 Javascript
详解webpack引用jquery(第三方模块)的三种办法
2019/08/21 jQuery
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
[53:38]OG vs LGD 2018国际邀请赛淘汰赛BO3 第三场 8.26
2018/08/30 DOTA
深入理解Python3中的http.client模块
2017/03/29 Python
python如何读写json数据
2018/03/21 Python
Pandas中把dataframe转成array的方法
2018/04/13 Python
python实现黑客字幕雨效果
2018/06/21 Python
Python爬虫破解登陆哔哩哔哩的方法
2020/11/17 Python
python 邮件检测工具mmpi的使用
2021/01/04 Python
matplotlib 范围选区(SpanSelector)的使用
2021/02/24 Python
CSS3按钮鼠标悬浮实现光圈效果源码
2016/09/11 HTML / CSS
九年级数学教学反思
2014/02/02 职场文书
支部鉴定材料
2014/06/02 职场文书
公益广告标语
2014/06/19 职场文书
环境工程专业自荐信范文
2014/06/24 职场文书
学用政策心得体会
2014/09/10 职场文书
校长四风对照检查材料
2014/09/27 职场文书
就业协议书盖章的注意事项
2014/09/28 职场文书
金榜题名主持词
2015/07/02 职场文书
运动会200米广播稿
2015/08/19 职场文书
2015年行政管理人员工作总结
2015/10/15 职场文书
css position fixed 左右双定位的实现代码
2021/04/29 HTML / CSS
Nginx本地配置SSL访问的实例教程
2022/05/30 Servers