参考 MSDN Library【Adding Entries to the Standard Context Menu】开发 ContextMenu
IE 额外的 ContextMenu 是透过注册机码 HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerMenuExt 来建立 所以只要在该位置下新增一个 Key 值例如新增【Make rz】则 IE 中按下右键就会出现相同名称的功能
如果我们想要在该功能上可以使用快捷键就如同开发 Windows Form 一样只要在英文名称前加上 & 符号即可
例如我们把 Key 值从【Make rz】改为【&Make rz】则当 ContextMenu 出现按下 M 就是执行该项功能
在该 Key 值底下有一个重要键值是 Contexts主要的功能是定义 ContextMenu 出现的时机 包含Default(预设载入)Images(在图片上)Control(任一控制项上)Tables(在表格格上)Text selection(纯文字反白选择时)Anchor(在连结上)
如果 ContextMenu 要包含两种以上的出现时机则将 value 自行做 logic or 计算再带入即可
例如在本范例中我们可以新增一个 DWORD 型态名称 Contexts值为 的键值则表示该 ContextMenu 【预设载入】【在连结上】【在图片上】按下右键就会出现【Make rz】的功能
另外还有 (Default) 这个键值该键值填入的内容就是使用者执行 ContextMenu 功能时交给谁来处理可能是 htmlexedll… 等等
例如本范例中我想要呼叫 javascript 来执行功能所以就填入【file://C:Program FilesMakerzjs】 这样大致上就算是完成注册机码的部份我们透过製作 reg 档案方便让使用者来进行安装以下是本範例 RegMakerzreg 档案 复制代码 代码如下: Windows Registry Editor Version [HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerMenuExt&Make rz] @="file://C:Program FilesMakerzjs" "Contexts"=dword: 以下是 Makerzjs 的内容 复制代码 代码如下: <script language="JavaScript" > var obj = externalmenuArgumentseventsrcElement; var str = objtagName; if (strtoUpperCase() == A || strtoUpperCase() == IMG) { if (strtoUpperCase() == A) { if (externalmenuArgumentseventshiftKey) { str = objfirstChildnodeValue; } else { str = externalmenuArgumentseventsrcElementhref; } } else { str = externalmenuArgumentseventsrcElementhref; } } else { if (strtoUpperCase() != BODY) { str = objinnerText; if (trim(str) == ) { str = externalmenuArgumentslocationhref; } } else { str = externalmenuArgumentslocationhref; } }
//// Preview //var url = + encodeURIComponent(str); //var width = ; //var height = ;
// NO Preview var url = + encodeURIComponent(str); var width = ; var height = ;
var left = (screenwidth width) / ; var top = (screenheight height) / ; var cmd = width= + width + height= + height + top= + top + left= + left; cmd += directories=no location=no menubar=no resizable=no scrollbars=no status=no toolbar=no;
newwin = windowopen(url windowname cmd); if (windowfocus) { newwinfocus() }
function trim(strValue) { var regL = /^[?@s]+/; var regR = /[?@s]+$/; strValue = strValuereplace(regL ""); strValue = strValuereplace(regR ""); return strValue; } </script>由于在 Contexts 的 value 设定为 x所以表示【预设载入】【在连结上】【在图片上】按下右键就会出现【Make rz】的功能 【预设载入】在页面空白处按下右键执行 ContextMenu 的【Make rz】表示目前页面连结进行缩短网址 【在连结上】在文字连结上按下右键执行 ContextMenu 的【Make rz】表示该文字连结进行缩短网址 【预设载入】在图片连结或是图片上按下右键执行 ContextMenu 的【Make rz】表示图片位置进行缩短网址
在 javascript 当中利用 externalmenuArgumentsevent来判断使用者在何种时机按下右键并取得该元素 利用 externalmenuArgumentseventsrcElementhref 取得该元素的连结 利用 externalmenuArgumentslocationhref 取得目前页面的连结
然后利用 windowopen 来开启 rztw 目标页面来显是缩短网址后的结果 如果是执行程式码的 – 的话表示有预览画面 (Preview)执行 则无预览画面(可以依照需求自由调整)
实际成果贴图 () 在空白处按下右键执行 ContextMenu 的【Make rz】表示目前页面连结进行缩短网址 (以 No Preview 功能呈现) ://rztw/KRHf () 在文字连结(新 闻)上按下右键执行 ContextMenu 的【Make rz】表示该文字连结进行缩短网址(以 Preview 功能呈现) ://rztw/dH () 在图片连结或是图片上按下右键执行 ContextMenu 的【Make rz】表示图片位置进行缩短网址 ://rztw/JlTDN
本功能范例可点此下载压缩档案包含RegMakerzreg 注册机码安装档Makerzjs 功能执行档DelMakerzreg 注册机码反安装档
安装执行 RegMakerzreg自行将 Makerzjs 放置于 C:Program Files 目录下
反安装执行 DelMakerzreg自行将 C:Program FilesMakerzjs 档案删除 |