Base on Griever/addMenu.uc.js. Now not only can add menu, you can modify the menu.
- %TITLES%, simple title.
- %FAVICON_BASE64%, Favicon's Base64.
- %IMAGE_BASE64%, Image's Base64.
modify the firebug key
page({
id: "menu_firebug_firebugInspect",
accesskey: "F",
clone: false
});
addMenuPlus 是一个非常强大的定制菜单的 uc 脚本。通过配置文件可添加、修改、隐藏菜单,修改后无需重启生效。
基于 Griever/addMenu.uc.js 修改
- 新增修改原有菜单的功能
- 新增参数
%FAVICON_BASE64%
:站点图标的 base64 - 新增参数
%IMAGE_BASE64%
:图片的 BASE64 - 新增参数
%TITLES%
:简短的标题
- 菜单栏的 "工具" 菜单中有个 "addMenu 的重新载入和编辑" 菜单,左键点击重新载入配置,右键打开文件编辑
- ID 为
addMenu-rebuild
,可添加 rebuild_userChrome.uc.xul 中统一进行管理
- page: 页面右键菜单
- tab: 标签右键
- app: 左上角橙色菜单
- too: 工具菜单
二级子菜单
PageMenu, TabMenu, ToolMenu, AppMenu
label 标签的名字
accesskey 快捷键
exec 启动外部应用程序。(我新增相对路径。 \\ 代表当前配置的路径,例:\\Chrome 配置下的Chrome文件夹)
keyword 指定了关键字的书签和搜索引擎
text 复制你想要的字符串到剪贴板,可与 keyword, exec 一起使用
url 打开你想要的网址
where 打开的位置 (current, tab, tabshifted, window)
condition 菜单出现的条件 (select, link, mailto, image, media, input, noselect, nolink, nomailto, noimage, nomedia, noinput)
oncommand/command 自定义命令
onclick 点击的函数
image 添加图标 (对应 图标 url 或 base64)
style 添加样式
... Firefox 菜单的其它属性
id 标签的ID(我新增的,修改原菜单用)
position/insertBefore/insertAfter: 位置的设置(3选1),position: 1, insertBefore: "id", insertAfter: "id"
clone false 为不克隆,直接改在原菜单上,再次修改必须重启生效
%EOL% 改行(\r\n)
%TITLE% 标题
%TITLES% 简化标题(我新增的,来自faviconContextMenu.uc.xul.css)
%URL% 地址
%SEL% 选取范围内的文字
%RLINK% 链接的地址
%IMAGE_URL% 图片的 URL
%IMAGE_BASE64% 图片的 Base64(我新增的)
%IMAGE_ALT% 图片的 alt 属性
%IMAGE_TITLE% 图片的 title 属性
%LINK% 链接的地址
%LINK_TEXT% 链接的文本
%RLINK_TEXT% 链接的文本
%MEDIA_URL% 媒体 URL
%CLIPBOARD% 剪贴板的内容
%FAVICON% Favicon(站点图标) 的 URL
%FAVICON_BASE64% Favicon 的 Base64(我新增的)
%EMAIL% E-mail 链接
%HOST% 当前网页(域名)
%LINK_HOST% 当前网页(域名)
%RLINK_HOST% 当前网页(域名)
%XXX_HTMLIFIED% 转义后的变量 (XXX 为 上面的 TITLE 等)
%XXX_HTML% 转义后的变量
%XXX_ENCODE% encodeURIComponent 后的变量
简短的变量
%h 当前网页(域名)
%i 图片的 URL
%l 链接的 URL
%m 媒体的 URL
%p 剪贴板的内容
%s 选取的文字列
%t 标题
%u URL
示例:页面右键添加一个菜单
page({
label: "复制链接文本",
accesskey: "C",
text: "%LINK_TEXT%",
insertAfter: "context-copylink",
condition: "link noimage"
});
示例:右键添加 翻译整个页面 菜单(可用于 https),来源
page({
label: "翻译整个页面",
insertAfter: "context-selectall",
image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABsElEQVQ4jZXTsWsTYRjH8Zf+AYX+HTd0cM9SyOoglXLg1ryDU5Fwi90iWsiikFaOOEkGl2IsSEGwoggh8JLUJSC14qB3yZWQXlKTJrn3vg7JncmZqn3ggXf5fXjeh/cVQggh0ln+qxdWOstVFQI6hEDDMAivQBYA15sonYXdXTg4iMPXmyidhaMjWFqCfP7vwDQ8CkL6o1kAYHsblpcXAitbdYRUfPreZzAOGYxCepcJQJjGpBOA/eEMIRU3HjTYfP6NwXgSPu/r34AwDWqdErVOCWEac8C6fcq6fcrDQ5eVrToXw0m4/TMCpuFCJUOhkiG1sxYjJ94QIRVP35/F58dvW7QvNF5vCtQ6JYpKUqhksKsWdtWKkUeHLkIqWt0x/VHIaq7Bzb0veD1NqzszgTANikpy98WteBfRdYRUf/SJN6TZTewgCRSVjJFXxz4v6+c8+9hGSMX9soPrJ4Dcmzvc27/Nux82r78+ia9jVy2EaeD1NE1fk8p/ZjXXwPWD+dcoTIPUzlrcVnkDq7wR76Ppa1xf4/gaxw9w5oCoorcwg0VhJxFeDMx8sCj8r8/0C7G+ixTa1p4GAAAAAElFTkSuQmCC",
oncommand: function(){
var tab = document.getElementById('content');
var win = tab.selectedBrowser.contentWindow.top.window;
//var cur_url = win.location.href;
d=win.document;b=d.body;o=d.createElement('scri'+'pt');o.setAttribute('src','https://translate.google.cn/translate_a/element.js?cb=googleTranslateElementInit');o.setAttribute('type','text/javascript');b.appendChild(o);v=b.insertBefore(d.createElement('div'),b.firstChild);v.id='google_translate_element';v.style.display='none';p=d.createElement('scri'+'pt');p.text='function googleTranslateElementInit(){new google.translate.TranslateElement({pageLanguage:\"\"},\"google_translate_element\");}';p.setAttribute('type','text/javascript');b.appendChild(p);
}
});
示例:页面右键添加多个菜单
page([
{
label: "复制链接文本",
text: "%LINK_TEXT%",
},
{ }, // 分隔条
{
label: '复制图像base64',
text: "%IMAGE_BASE64%",
condition: "image",
}
]);
示例:页面右键添加子菜单
var pagesub = PageMenu({ label: "子菜单", accesskey: "z" });
pagesub([
{
label: "Google Translate",
url: "http://translate.google.cn/translate?u=%u",
condition: "nolink",
accesskey: "t",
},
{
label: "Google docs",
url : "http://docs.google.com/viewer?url=%l",
accesskey: "d",
where: "tab",
},
{
label: "重新加载配置",
accesskey: "r",
oncommand: "setTimeout(function(){ addMenu.rebuild(true); }, 10);"
}
]);
示例:菜单出现的条件,排除了链接、图片、输入框、选择等多个条件
page({
label: "snaplinks批量操作模式",
condition: "nolink noimage noinput noselect",
oncommand: "snapLinks.init();"
});
示例:隐藏 App 菜单的 Web 开发者
css("#appmenu_webDeveloper { display: none; }");
示例:"字符编码" 移动到 "web开发者" 的位置
tab({
id: "appmenu_developer_charsetMenu",
insertAfter: "appmenu_webDeveloper",
// clone: false, // 不克隆,直接改在原来的菜单上面
});
示例:修改 firebug 快捷键
page({
id: "menu_firebug_firebugInspect",
accesskey: "F",
clone: false // 直接修改原菜单,还原回去需重启后生效
});
示例:打开相对路径程序或文件夹
page({
label: "执行相对路径程序",
// exec: "\\1\\base64.exe", // 执行当前配置文件夹下的程序
exec: "\\Chrome" // 打开当前配置下的Chrome文件夹
});
示例:添加图标,如果是原有的菜单需要加上 class
,menuitem-iconic 或 menu-iconic,前一个是菜单,后一个是菜单项。
page({
label: "图标测试菜单",
image: "chrome://browser/content/abouthome/bookmarks.png"
// 或
// image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABxElEQVQ4jZXQzYsScRzH8d/f16lTFCwRdOoSUYddtlrUaXTVEdR1xqfysLtUrC2EujNjbplPjIGtJIZB6YLMjqu105/w7tQhMB8+99f7C18hVpiiKGiaRjqdJplMsor5B6dSKWzbxnVdVFVdL6CqKuPxmMlkgmmaxOPx9QKapmHbNt1uF0VREEKISCRCOBxmd3d3eSyRSDAcDmk2m4RCIYLBIPl8nsFggCzLiwOyLBOLxej3+7TbbSqVCuVymVqtRqPRQJKk+QE5bSLnPhGNRrEsi06ng2VZtFot6vU61WoVn883Hz/TDLLmhOSJQ/j1N3q9HqVSiUAggCzLSJKE1+udjyXNIKs7VLq/KZ+5hI/HbGd6+P3+5c/yqQYp3eHdmcvL6pT900sK7V94Ds656/+4OOBN6CSLDuXPLocfpqjFC56bE45bP9nKjbjjNf8f2Eno7BUcjI7L4fspe4ULMrrDm8aMzRcjbnuMxde3ckP0zhX7p5fE3tqkTxzy9RmPsiM2dpZgIYS4r32n0L4iY0xIFh2O6jMeZkfceroCFkKIe4qF5+Cco9qMV9UZD1I/uPl4Rfx3G7LFdd9Xrj35wo3t9fAfyK1fDftrXK0AAAAASUVORK5CYII="
});
示例:输入框右键增加 "重做" 菜单 page({ label: "重做", condition: "input", insertAfter: "context-undo", command: "cmd_redo", accesskey: "y" });
示例:输入框右键增加 "粘贴并确定" 菜单,先增加一个空格,然后粘贴,再确定
page({
label: "粘贴并确定",
condition: "input",
insertAfter: "context-paste",
oncommand: function(event) {
function $(id) document.getElementById(id)
// 给原输入框增加空格
var input = gContextMenu.target;
input.value = input.value + " ";
// $('context-selectall').doCommand(); // 全选
// $('context-cut').doCommand(); // 剪切
// $('context-copy').doCommand(); // 复制
$('context-paste').doCommand(); // 粘贴
// 回车键
window.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDOMWindowUtils)
.sendKeyEvent("keypress", KeyEvent.DOM_VK_ENTER, 0, 0);
}
});
示例:标签右键增加 复制地址(BBS、MD)
菜单,左键复制 BBS 格式,中键原标题,右键 MD 格式,可去除标题一定内容。
tab({
label: "复制地址(BBS、MD)",
tooltiptext: "左键复制 BBS 格式,右键 MD 格式",
onclick: function(event){
var title = addMenu.convertText("%TITLE%"),
url = addMenu.convertText("%URL%");
[" - 互助分享 - 大气谦和!", "_小说阅读页|小说下载"].forEach(function(r){ title = title.replace(r, ""); });
switch(event.button){
case 0:
addMenu.copy("[url=" + url + "]" + title + "[/url]");
break;
case 1:
addMenu.copy(title);
event.target.parentNode.hidePopup();
break;
case 2:
addMenu.copy("[" + title + "](" + url + ")");
break;
}
}
});
示例:链接右键增加 复制地址(BBS、MD)
菜单,基本同上,略加修改
page({
label: "复制地址(BBS、MD)",
condition: "link",
tooltiptext: "左键复制 BBS 格式,右键 MD 格式",
onclick: function(event){
var title = addMenu.convertText("%RLINK_TEXT%"),
url = addMenu.convertText("%RLINK%");
[" - 互助分享 - 大气谦和!"].forEach(function(r){ title = title.replace(r, ""); });
switch(event.button){
case 0:
addMenu.copy("[url=" + url + "]" + title + "[/url]");
break;
case 1:
addMenu.copy(title);
event.target.parentNode.hidePopup();
break;
case 2:
addMenu.copy("[" + title + "](" + url + ")");
break;
}
}
});
示例:标签的右键菜单中加入复制图标网址的功能,左键 base64,右键 URL
tab({
label: "复制 Favicon 的 base64/URL",
tooltiptext: "左键 base64,右键 URL",
onclick: function(e){
switch(e.button){
case 0:
addMenu.copy(addMenu.convertText("%FAVICON_BASE64%"));
break;
case 1:
break;
case 2:
addMenu.copy(addMenu.convertText("%FAVICON%"));
break;
}
}
})
示例:子菜单中的 测试视频链接 只在 youku 页面显示,其它页面隐藏。
var testMenu = PageMenu({
label: '测试子菜单',
onpopupshowing: function (event){
Array.slice(event.target.children).forEach(function(elem){
if(elem.id == "mtest-video"){
elem.hidden = content.location.host.indexOf("youku") == -1
}
});
}
});
testMenu([
{
id: "mtest-video",
label: "测试视频链接",
hidden: true
}
]);
addMenu.copy() // 复制
addMenu.exec(path, arg) // 启动程序
addMenu.$$('a:not(:empty)', null, true) // 获取所有被选中的链接