天天看点

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

其实就是类似当安装完 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>

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

要注意几点:

这个功能适用于 IE 和所有以 IE 为内核的第三方浏览器,比如 Mathxon。

“复制图像地址(&Z)”后面的符号 Z 为快捷键,根据不冲突又易按的原则,你至少还可以改为:q、w、x。

contexts 对应应用对象有:Default、Images、Controls、Tables、Text selection、Anchor、Unknown。

与 contexts 并列的,还有一个可选的双字节 Flags,值为 0x1 时,脚本将以窗口对话框方式执行。

如果脚本存在于某 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 p_w_picpaths 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 p_w_picpaths in a selected region.

0x20 CONTEXT_MENU_ANCHOR Context menu of links only. Does not include linked p_w_picpaths or p_w_picpath 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

目前自己用的:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt]

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

@="D:\\Afly\\CopyImg.html"

"contexts"=dword:00000002

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\打开图像(&W)]

@="D:\\Afly\\OpenImg.html"

"contexts"=dword:00000002

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\播放该音乐(&M)]

@="D:\\Afly\\OpenMusic.html"

"Contexts"=dword:00000022

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\查询单词(&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. {

    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>

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

转载于:https://blog.51cto.com/508239/218260