zoukankan      html  css  js  c++  java
  • 在浏览器右键添加自定义菜单

    在浏览器右键添加自定义菜单

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

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

    Windows Registry Editor Version 5.00

    [HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerMenuExt复制图像地址(&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_USERSoftwareMicrosoftInternet ExplorerMenuExtShow 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_USERSoftwareMicrosoftInternet ExplorerMenuExtMy &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_USERSoftwareMicrosoftInternet ExplorerMenuExt复制图像地址(&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

    目前自己用的:

    Windows Registry Editor Version 5.00
     
    [HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerMenuExt]
     
    [HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerMenuExt复制图像地址(&Z)]
    @="D:\Afly\CopyImg.html"
    "contexts"=dword:00000002
     
    [HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerMenuExt打开图像(&W)]
    @="D:\Afly\OpenImg.html"
    "contexts"=dword:00000002
     
    [HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerMenuExt播放该音乐(&M)]
    @="D:\Afly\OpenMusic.html"
    "Contexts"=dword:00000022
     
    [HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerMenuExt查询单词(&D)]
    @="D:\Afly\OpenDict.html"
    "contexts"=dword:00000030

    <script language="javascript" defer>
       var rng = external.menuArguments.document.selection.createRange();
       var str = new String(rng.text);
       if(str.length == 0) str=external.menuArguments.event.srcElement.innerText;
       window.open("http://sh.dict.cn/search/?q="+str,"_search");  
    </script>

    <script language="javascript" defer>
    var Elem=external.menuArguments.event.srcElement;
    var imgUrl='';
    var rng = external.menuArguments.document.selection.createRange();
    var str = new String(rng.text);
    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;
            }
        }
    }
    else if(str.length != 0){
     imgUrl =  str;
    }
    if(imgUrl) eval('wi'+'ndow.op'+'en(imgUrl,"_blank")');
    </script>

    <script language="javascript" defer>
    var Elem=external.menuArguments.event.srcElement;
    var MusicUrl="";
    if(Elem.tagName=='IMG'){
     MusicUrl=Elem.parentElement.href;
    }
    if(Elem.tagName=='A'){
     MusicUrl=Elem.href;
    }
    window.open("file://D:/Afly/Player.html?"+MusicUrl,'_blank','status=no,resizable=yes,width=350,height=250,left=250,top=130');
    //encodeURIComponent(MusicUrl)
    </script>

    <html>
    <head>
    <script language="javascript">
    var url = document.location.search.substr(1);
    window.onload=function() {
        if(url)WMP.URL=url;WMP.play();
    }
    </script>
    </head>
    <body style="margin:0;padding:0">
    <div id="MusicBox" class="SideContent">
    <object classid="clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6" id="WMP" width="100%" height="100%">
      <param name="URL" value="" />
      <param name="autoStart" value="1" />
      <param name="playCount" value="3" />
      <param name="rate" value="1" />
      <param name="enabled" value="1" />
      <param name="invokeURLs" value="-1" />
      <param name="volume" value="50" />
      <param name="mute" value="0" />
      <param name="uiMode" value="full" />
      <param name="stretchToFit" value="0" />
      <param name="windowlessVideo" value="1" />
      <param name="enableContextMenu" value="1" />
      <param name="fullScreen" value="0" />
      <param name="enableErrorDialogs" value="0" />
    </object>
    </div>
    </body>
    </html>

    Permalink | Comments (5) | Hits: 17603 | Time: 0:38:34
    The Clipboard under IE/FF
    自定义“搜索助手”
    All Comments
    #1 - James - 2006-12-2 16:51:12
    佩服!
    我这边想实现这样一个功能:在浏览器中的输入框内点右键时,出现“插入...”的标签,并可以将预定的内容粘贴到该位置。
    这些内容是一个URL地址,或者是一段引用的网络上有格式的文字图片等,因为常用,所以不想每次都先去copy。
    URL应该是固定的,但引用的内容可能有变化。
    希望大侠能帮帮忙啦!
    #2 - 洋洋 - 2006-12-19 13:26:29
    现在就来试一下,hug
    #3 - 5368 - 2010-2-6 0:32:08
    感谢afly的代码!
    不知在firefox中怎么自定义右键?
    #4 - Afly - 2010-2-6 14:30:11
    以上这些DIY的功能基本上FF也都有了。。。很多插件都有选项是否显示在右键;也有专门的菜单/右键的设置插件,但没专门研究过,估计也需要写配置代码之类的……
    #5 - mingjiang - 2010-3-18 22:08:22
    看看这边06年就有了 和这个道理是是一样的 
    http://uncms.host.ctrit.net/blog/html/12/
  • 相关阅读:
    HDU 1247
    [转载]亲密接触VC6.0编译器
    [转载]你该学什么程序语言
    ACE学习2009116
    新东方英语学习二
    电脑族吃什么比较好
    爱默生生活的准则
    成大事必备9种能力9种手段9种心态
    [转载]句柄和指针
    关于WM_CREATE消息
  • 原文地址:https://www.cnblogs.com/developer-ios/p/6551355.html
Copyright © 2011-2022 走看看