电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

开发 Internet Explorer 右键功能表(ContextMenu)


发布日期:2023/12/25
 

参考 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 档案删除

上一篇:readonly和disabled区别详解

下一篇:计算新浪Weibo消息长度