给IE浏览器增加自定义右键菜单

来源:互联网 发布:荣耀三九年 知乎 编辑:程序博客网 时间:2024/05/21 18:50

其实就是类似当安装完 Flashget 后 Internet Explorer 的右键多了“使用网际快车下载”的选项一样,现在我们的需求是:当我们在图片右键时出现“复制图像地址”的选项。

其实很简单,先把下列代码存为 abc.reg 并导入:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\复制图像地址(&Z)]
@="C:\\CopyImageUrl.htm"
"contexts"=dword:00000002

并把下列代码存为 C:\CopyImageUrl.htm:

<script language="javascript" defer>
var Elem=external.menuArguments.event.srcElement;
var imgUrl='';
if(Elem.tagName=='IMG') imgUrl=Elem.src;
else if(Elem.tagName=='A'){
    var cElem=Elem.children;
    if(cElem.length){
        for(i=0; i<=cElem.length-1; i++){
            if(cElem[i].tagName=='IMG') imgUrl=cElem[i].src;
            break;
        }
    }
}
if(imgUrl) clipboardData.setData('text',imgUrl)
</script>

重启你的浏览器就可以用了。

要注意几点:

  1. 这个功能适用于 IE 和所有以 IE 为内核的第三方浏览器,比如 Mathxon。
  2. “复制图像地址(&Z)”后面的符号 Z 为快捷键,根据不冲突又易按的原则,你至少还可以改为:q、w、x。
  3. contexts 对应应用对象有:Default、Images、Controls、Tables、Text selection、Anchor、Unknown。
  4. 与 contexts 并列的,还有一个可选的双字节 Flags,值为 0x1 时,脚本将以窗口对话框方式执行。
  5. 如果脚本存在于某 dll 文件的 123 位置,还可以用“Example.dll, 123”这样的指向来定义。

快捷键

根据个人经验,熟练地使用这个功能,至少可以让操作快上 80% 的时间,甚至 Flashget 默认也没设置这个人性化的功能,遗憾。不过我们完全可以修改之,嘿嘿!

可选项

Value Constant_Name Description
0x01 CONTEXT_MENU_DEFAULT Shown on all context menus.
0x02 CONTEXT_MENU_IMAGE Context menu of images only.
0x04 CONTEXT_MENU_CONTROL Context menu of form controls only.
0x08 CONTEXT_MENU_TABLE Context menu of tables only.
0x10 CONTEXT_MENU_TEXTSELECT Context menu of selected text only, including images in a selected region.
0x20 CONTEXT_MENU_ANCHOR Context menu of links only. Does not include linked images or image maps.
0x40 CONTEXT_MENU_UNKNOWN Right-click on none of the above.

多种值综合应用是“或”的关系,比如需要在默认和连接时右键时显示,则 contexts=0x21;想单独在图片上显示,则 contexts=0x02 了。

举例

下面例子可以将页面在新窗口显示:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\Show in New Window]
@="file://c:\\example2.htm"
"Contexts"=dword:00000001

c:\example2.htm

<SCRIPT LANGUAGE="JavaScript" defer>
    window.open(external.menuArguments.location.href);
</SCRIPT>

下面例子可以将选中文字变为大写:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\My &Menu Item]
@="file://c:\myscript.htm"
"Contexts"=dword:00000001

c:\myscript.htm

<SCRIPT LANGUAGE="JavaScript" defer>
   var parentwin = external.menuArguments;
   var doc = parentwin.document;
   var sel = doc.selection;
   var rng = sel.createRange();
   var str = new String(rng.text);
   if(str.length != 0) rng.text =  str.toUpperCase();
</SCRIPT>

效果

删除

将下列代码存为 unreg.reg 并导入就可以了:

Windows Registry Editor Version 5.00

[-HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\复制图像地址(&Z)]

参考

About the Browser
http://windowssdk.msdn.microsoft.com/en-gb/library/ms629731.aspx
Adding Entries to the Standard Context Menu
http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/ext/tutorials/context.asp
如何在右键菜单添加“拷贝图像地址”
http://forum.maxthon.com/index.php?showtopic=13228&st=0&p=87259

原文地址:http://www.playes.net/Blog/436.asp

-----------------------------------------------------------------------------------------------------------------------------------

以上内容来自网络,实现了在浏览器添加右键菜单,点击菜单后响应htm文件打开页面等操作,而我希望实现通过右键菜单打开本地应用程序,方法为把htm后缀改为hta。

C:\Myscript.hta:

<script language="JavaScript">             function RunNotepad(){     var shell = new ActiveXObject("WSCRIPT.Shell");        shell.Run("notepad.exe C:\1.txt");  }window.resizeTo(0,0)window.onload=RunNotepad;</script>
这样点击浏览器右键菜单就可以打开本地记事本文件1.txt了。

这是一种通过添加注册表加执行JavaScript脚本实现浏览器右键菜单功能,其功能有限。如果要实现更复杂的就需要编写浏览器插件了。

1 0
原创粉丝点击