|
15楼#
发布于:2014-05-30 17:30
自用的KeyChanger.uc.js
var KeyChanger = {
keys : {
// 重启浏览器
'p+ctrl' : 'Services.appinfo.invalidateCachesOnRestart() || Application.restart();',
// 打开Profile
'[+ctrl' : 'Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsILocalFile).reveal();',
// 打开Chrome
']+ctrl' : 'Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("UChrm", Components.interfaces.nsILocalFile).reveal();',
// 转到页首
'q+ctrl' : 'goDoCommand("cmd_scrollTop");',
// 转到页尾
'w+ctrl' : 'goDoCommand("cmd_scrollBottom");',
// 关闭标签页
'x+ctrl' : 'gBrowser.removeCurrentTab();',
// 撤销关闭标签页
'z+ctrl' : 'undoCloseTab();',
// 刷新标签页/frame
'r+ctrl' : 'KeyChanger.reloadFrame();',
// 强制刷新标签页/frame
'r+ctrl+shift' : 'KeyChanger.reloadFrame(true);',
// 打开Error Console
'j+shift' : 'toJavaScriptConsole();'
},
reloadFrame: function(skipCache) {
let prevDoc, doc = document;
while (doc) {
prevDoc = doc;
doc = doc.activeElement.contentDocument
}
prevDoc.location.reload(skipCache);
},
makeKeyset : function() {
var keys = this.makeKeys();
if (!keys)
return;
var keyset = document.getElementById('keychanger-keyset');
if (keyset)
keyset.parentNode.removeChild(keyset);
keyset = document.createElement('keyset');
keyset.setAttribute('id', 'keychanger-keyset');
keyset.appendChild(keys);
var df = document.createDocumentFragment();
Array.slice(document.getElementsByTagName('keyset')).forEach(function(elem) {
df.appendChild(elem);
});
var insPos = document.getElementById('mainPopupSet');
insPos.parentNode.insertBefore(keyset, insPos);
insPos.parentNode.insertBefore(df, insPos);
},
makeKeys : function(){
if (!this.keys)
return null;
var dFrag = document.createDocumentFragment();
Object.keys(this.keys).forEach(function(n) {
let keyString = n.toUpperCase().split("+");
let modifiers = "", key, keycode, k;
for (let i = 0, l = keyString.length; i < l; i++) {
k = keyString[i];
switch (k) {
case "CTRL":
case "CONTROL":
case "ACCEL":
modifiers += "accel,";
break;
case "SHIFT":
modifiers += "shift,";
break;
case "ALT":
case "OPTION":
modifiers += "alt,";
break;
case "META":
case "COMMAND":
modifiers += "meta,";
break;
case "OS":
case "WIN":
case "WINDOWS":
case "HYPER":
case "SUPER":
modifiers += "os,";
break;
case "":
key = "+";
break;
case "BACKSPACE":
case "BKSP":
case "BS":
keycode = "VK_BACK";
break;
case "RET":
case "ENTER":
keycode = "VK_RETURN";
break;
case "ESC":
keycode = "VK_ESCAPE";
break;
case "PAGEUP":
case "PAGE UP":
case "PGUP":
case "PUP":
keycode = "VK_PAGE_UP";
break;
case "PAGEDOWN":
case "PAGE DOWN":
case "PGDN":
case "PDN":
keycode = "VK_PAGE_DOWN";
break;
case "TOP":
keycode = "VK_UP";
break;
case "BOTTOM":
keycode = "VK_DOWN";
break;
case "INS":
keycode = "VK_INSERT";
break;
case "DEL":
keycode = "VK_DELETE";
break;
default:
if (k.length === 1) {
key = k;
} else if (k.indexOf("VK_") === -1) {
keycode = "VK_" + k;
} else {
keycode = k;
}
break;
}
}
let elem = document.createElement('key');
if (modifiers !== '')
elem.setAttribute('modifiers', modifiers.slice(0, -1));
if (key)
elem.setAttribute('key', key);
else if (keycode)
elem.setAttribute('keycode', keycode);
let cmd = this.keys[n];
switch (typeof cmd) {
case 'function':
elem.setAttribute('oncommand', '(' + cmd.toSource() + ').call(this, event);');
break;
case 'object':
Object.keys(cmd).forEach(function(a) {
elem.setAttribute(a, cmd[a]);
}, this);
break;
default:
elem.setAttribute('oncommand', cmd);
}
dFrag.appendChild(elem);
}, this);
return dFrag;
}
};
KeyChanger.makeKeyset(); |
|
|
上一页
下一页