阅读:2233回复:10
【已解决】KeyChanger.uc.js在116不能用了,求续命啊
// ==UserScript==
// @name KeyChanger.uc.js // @author Griever // @namespace http://d.hatena.ne.jp/Griever/ // @include main // @description 为火狐添额外的快捷键 // @license MIT License // @charset UTF-8 // @version 2019.09.18.1 // @note 0.0.2 メニューを右クリックで設定ファイルを開けるようにした // @note 0.0.2 Meta キーを装飾キーに使えるようになったかもしれない(未テスト) // @note 0.0.2 Windows キーを装飾キーに使えるようになったかもしれない(未テスト Firefox 17 以降) // @note 2018.1.25.2 Firefox59+ 修复 // ==/UserScript== location.href.startsWith('chrome://browser/content/browser.x') && (function () { var useScraptchpad = true; // 如果不存在编辑器,则使用代码片段速记器,否则设置编辑器路径 //let {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components; window.KeyChanger = { get file() { var aFile = FileUtils.getFile("UChrm", ["local", "_keychanger.js"], false); if (!aFile.exists()) { saveFile(aFile, ''); alert('_keychanger配置为空,该文件在local目录下'); } delete this.file; return this.file = aFile; }, get FILE() { return this.file; }, isBuilding: false, makeKeyset: function (isAlert) { KeyChanger.isBuilding = true; var s = new Date(); var keys = this.makeKeys(); if (!keys) { isBuilding = false; return this.alert('KeyChanger', 'Load error.'); } var keyset = document.getElementById('keychanger-keyset'); if (keyset) keyset.parentNode.removeChild(keyset); keyset = document.createXULElement('keyset'); keyset.setAttribute('id', 'keychanger-keyset'); keyset.appendChild(keys); var df = document.createDocumentFragment(); Array.prototype.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); var e = new Date() - s; if (isAlert) { this.alert('KeyChanger: Loaded', e + 'ms'); } setTimeout(function () { KeyChanger.isBuilding = false; }, 100); }, makeKeys: function () { var str = this.loadText(this.file); if (!str) return null; var sandbox = new Components.utils.Sandbox(new XPCNativeWrapper(window)); var keys = Components.utils.evalInSandbox('var keys = {};\n' + str + ';\nkeys;', sandbox); if (!keys) return null; var dFrag = document.createDocumentFragment(); Object.keys(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; 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.createXULElement('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 = keys[n]; switch (typeof cmd) { case 'function': elem.setAttribute('oncommand', '(' + cmd.toString() + ').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; }, createMenuitem: function () { var menuitem = document.createXULElement('menuitem'); menuitem.setAttribute('id', 'toolsbar_KeyChanger_rebuild'); menuitem.setAttribute('label', '自定义快捷键'); menuitem.setAttribute('tooltiptext', '左键:重载配置\n右键:编辑配置'); menuitem.setAttribute('oncommand', 'setTimeout(function(){ KeyChanger.makeKeyset(true); }, 10);'); menuitem.setAttribute('onclick', 'if (event.button == 2) { event.preventDefault();KeyChanger.edit(KeyChanger.file); }'); var insPos = document.getElementById('devToolsSeparator'); insPos.parentNode.insertBefore(menuitem, insPos); }, loadText: function (aFile) { var fstream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream); var sstream = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(Ci.nsIScriptableInputStream); fstream.init(aFile, -1, 0, 0); sstream.init(fstream); var data = sstream.read(sstream.available()); try { data = decodeURIComponent(escape(data)); } catch (e) { } sstream.close(); fstream.close(); return data; }, alert: function (aMsg, aTitle, aCallback) { var callback = aCallback ? { observe: function (subject, topic, data) { if ("alertclickcallback" != topic) return; aCallback.call(null); } } : null; var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService); alertsService.showAlertNotification( "chrome://global/skin/icons/information-32.png", aTitle || "addMenu", aMsg + "", !!callback, "", callback); }, edit: function (aFile, aLineNumber) { if (KeyChanger.isBuilding) return; if (!aFile || !aFile.exists() || !aFile.isFile()) return; var editor; try { editor = Services.prefs.getComplexValue("view_source.editor.path", Ci.nsIFile); } catch (e) { } if (!editor || !editor.exists()) { if (useScraptchpad) { this.openScriptInScratchpad(window, aFile); return; } else { alert("请先设置编辑器的路径!!!"); var fp = Cc['@mozilla.org/filepicker;1'].createInstance(Ci.nsIFilePicker); fp.init(window, "设置全局脚本编辑器", fp.modeOpen); fp.appendFilter("执行文件", "*.exe"); if (fp.show() == fp.returnCancel || !fp.file) return; else { editor = fp.file; Services.prefs.setCharPref("view_source.editor.path", editor.path); } } } // 调用自带的 if(typeof(userChrome) == 'undefined') { this.openScriptInScratchpad(window, aFile); return; } else { var aURL = userChrome.getURLSpecFromFile(aFile); var aDocument = null; var aCallBack = null; var aPageDescriptor = null; gViewSourceUtils.openInExternalEditor({ URL: aURL, lineNumber: aLineNumber }, aPageDescriptor, aDocument, aLineNumber, aCallBack); } }, openScriptInScratchpad: function (parentWindow, file) { let spWin = window.openDialog("chrome://devtools/content/scratchpad/index.xul", "Toolkit:Scratchpad", "chrome,resizable=yes,centerscreen,dependent"); spWin.addEventListener("load", function spWinLoaded() { spWin.removeEventListener("load", spWinLoaded, false); let Scratchpad = spWin.Scratchpad; Scratchpad.setFilename(file.path); Scratchpad.addObserver({ onReady: function () { Scratchpad.removeObserver(this); Scratchpad.importFromFile.call(Scratchpad, file); } }); }, false); }, exec: function (path, arg) { var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile); var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess); try { var a = (typeof arg == 'string' || arg instanceof String) ? arg.split(/\s+/) : [arg]; file.initWithPath(path); process.init(file); process.run(false, a, a.length); } catch (e) { this.log(e); } }, log: function () { Services.console.logStringMessage("[KeyChanger] " + Array.prototype.slice(arguments)); }, }; window.KeyChanger.createMenuitem(); window.KeyChanger.makeKeyset(); })(); |
|
1楼#
发布于:2023-08-02 14:42
这个是_keychanger.js文件
//一键打开新标签页 keys[1] = "BrowserOpenTab();"; //一键打开指定网址 keys[2] = function() {gBrowser.selectedTab=gBrowser.addTrustedTab("https://bbs.deepin.org/", {triggeringPrincipal: gBrowser.contentPrincipal});}; keys[3] = function() {gBrowser.selectedTab=gBrowser.addTrustedTab("https://www.pcbeta.com/", {triggeringPrincipal: gBrowser.contentPrincipal});}; keys[4] = function() {gBrowser.selectedTab=gBrowser.addTrustedTab("https://www.itsk.com/", {triggeringPrincipal: gBrowser.contentPrincipal});}; keys[5] = function() {gBrowser.selectedTab=gBrowser.addTrustedTab("https://www.firefox.net.cn/", {triggeringPrincipal: gBrowser.contentPrincipal});}; //一键打开标签组 keys[6] = function(){var newtabs=["https://www.pconline.com.cn/", "https://bbs.kafan.cn/forum-215-1.html", "https://www.163.com/", "https://www.autohome.com.cn/", "https://www.douyu.com/directory/myFollow"] ;var i=0;while(i<=newtabs.length-1){gBrowser.selectedTab=gBrowser.addTrustedTab(newtabs);i=i+1;}}; keys[7] = function() {gBrowser.selectedTab=gBrowser.addTrustedTab("https://bbs.deepin.org/", {triggeringPrincipal: gBrowser.contentPrincipal});}; keys[8] = function() {gBrowser.selectedTab=gBrowser.addTrustedTab("https://www.pcbeta.com/", {triggeringPrincipal: gBrowser.contentPrincipal});}; keys[9] = function() {gBrowser.selectedTab=gBrowser.addTrustedTab("https://tellme.pw/avmoo", {triggeringPrincipal: gBrowser.contentPrincipal});}; //启用翻译功能 //keys['F1'] = function() {gBrowser.loadURI("javascript:{d=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%20googleTranslateElementInit(){new%20google.translate.TranslateElement({pageLanguage:%22%22},%22google_translate_element%22);}';p.setAttribute('type','text/javascript');b.appendChild(p);}void%200", {triggeringPrincipal: gBrowser.contentPrincipal});}; //启用翻译功能 //复制当前标签页 keys['F2'] = "duplicateTabIn(gBrowser.selectedTab, 'tab')"; //查看页面信息 //keys['F3'] = "gContextMenu.viewInfo();"; //关闭当前标签声音 keys['F4'] = "gBrowser.selectedTab.toggleMuteAudio()"; //查看页面信息 keys['a'] = function(ev) {BrowserPageInfo();}; //关闭当前页 keys['f'] = "gBrowser.removeCurrentTab();"; //复制当前页的URL keys['c'] = function() { var gClipboardHelper = Components.classes['@mozilla.org/widget/clipboardhelper;1'].getService(Components.interfaces.nsIClipboardHelper);gClipboardHelper.copyString(gBrowser.currentURI.spec); }; //重启浏览器 keys['d'] = "Services.startup.quit(Services.startup.eAttemptQuit | Services.startup.eRestart);"; //新建标签页并光标定位到地址栏 keys['y'] = function() { document.getElementById("cmd_newNavigatorTab").doCommand();}; //刷新当前页 keys['t'] = function(ev) {gBrowser.selectedBrowser.reload()}; //跳过缓存刷新标签页 keys['alt+t'] = function(ev) {BrowserReloadSkipCache()}; //激活左边标签页 keys['q'] = function(ev) {gBrowser.tabContainer.advanceSelectedTab(-1, true)}; //激活右边标签页 keys['e'] = function(ev) {gBrowser.tabContainer.advanceSelectedTab(+1, true)}; //打开profile keys['j'] = function(ev) {Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile).launch();}; //打开chrome keys['k'] = function(ev) {Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("UChrm", Components.interfaces.nsIFile).reveal();}; //转到页首 //keys['j'] = function(ev) {goDoCommand('cmd_scrollTop')}; //转到页尾 //keys['k'] = function(ev) {goDoCommand('cmd_scrollBottom')}; //谷歌站内搜索 keys['g'] = "var s = prompt('谷歌站内搜索:', '');if (s.length > 0) gBrowser.addTrustedTab('https://www.google.com/search?q=site:' + encodeURIComponent( gBrowser.currentURI.host) + ' ' + encodeURIComponent(s));";//Google站内搜索 //百度站内搜索 keys['b'] = "var s = prompt('百度站内搜索:', '');if (s.length > 0) gBrowser.addTrustedTab('https://www.baidu.com/s?wd=site:' + encodeURIComponent( gBrowser.currentURI.host) + ' ' + encodeURIComponent(s));";//Baidu站内搜索 //切换窗口大小 keys['h'] = function () { if (window.windowState === 1) {restore();} else if (window.windowState === 2) {restore();} else if (window.windowState === 3) {maximize();} else if (window.windowState === 4) {restore();} else {} }; //稍后阅读标记/去除标记 keys['m'] = 'document.getElementById("pageAction-urlbar-_cd7e22de-2e34-40f0-aeff-cec824cbccac_").click();' //打开设置选项 keys['o'] = "openPreferences();"; //隐私窗口 keys['p'] = "OpenBrowserWindow({private: true});"; //恢复关闭的标签 keys['r'] = "undoCloseTab();"; //聚焦到搜索栏 //keys['s'] = "BrowserSearch.webSearch();"; //降低页面亮度 keys['n'] = function() { gBrowser.loadURI("javascript:(function(){var%20night=function(w){(function(d){var%20css='html{opacity:0.7!important;background:black!important;}body{background:white!important;}';var%20s=d.getElementsByTagName('style');for(var%20i=0,si;si=s;i++){if(si.innerHTML==css){si.parentNode.removeChild(si);return}};var%20heads=d.getElementsByTagName('head');if(heads.length){var%20node=d.createElement('style');node.type='text/css';node.appendChild(d.createTextNode(css));heads[0].appendChild(node)}})(w.document);%20for(var%20i=0,f;f=w.frames;i++){try{arguments.callee(f)}catch(e){}}};night(window)})();", {triggeringPrincipal: gBrowser.contentPrincipal}); }; //前进 keys['x'] = "gBrowser.webNavigation.canGoForward && gBrowser.webNavigation.goForward();"; //后退 keys['z'] = "gBrowser.webNavigation.canGoBack && gBrowser.webNavigation.goBack();"; //打开剪切板地址 keys['v'] = function() {gBrowser.selectedTab = gBrowser.addTrustedTab(readFromClipboard());}; //开关书签工具栏 keys['s'] = function(event) {var bar = document.getElementById("PersonalToolbar"); setToolbarVisibility(bar, bar.collapsed);}; |
|
2楼#
发布于:2023-08-04 18:10
get file() {
} 这个方法里 FileUtils 不能用了,换成 const ds = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties); const file = ds.get("UChrm", Components.interfaces.nsIFile); file.append("_keychanger.js"); // 这里改成你的配置文件的路径即可。 |
|
3楼#
发布于:2023-08-05 20:12
york144122:get file() {谢谢大佬,能再详细一下就好了,我弄到现在也没有搞好 |
|
4楼#
发布于:2023-09-02 13:13
在奶酪定制版找来的
// ==UserScript== // @name KeyChanger.uc.js // @author Griever // @namespace http://d.hatena.ne.jp/Griever/ // @include main // @description 快捷键配置脚本 // @description:en Additional shortcuts for Firefox // @license MIT License // @charset UTF-8 // @version 2022.11.27 // @note 2022.11.27 修复 gBrowser // @note 2022.06.03 新增 getSelctionText(),修增 saveFile 不存在 // @note 0.0.2 メニューを右クリックで設定ファイルを開けるようにした // @note 0.0.2 Meta キーを装飾キーに使えるようになったかもしれない(未テスト) // @note 0.0.2 Windows キーを装飾キーに使えるようになったかもしれない(未テスト Firefox 17 以降) // @note 2018.1.25.2 Firefox59+ 修复 // ==/UserScript== location.href.startsWith("chrome://browser/content/browser.x") && (function () { var useScraptchpad = true; // If the editor does not exist, use the code snippet shorthand, otherwise set the editor path //let {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components; const INTERNAL_MAP = { tab: { close: { current: function () { gBrowser.removeTab(gBrowser.selectedTab); }, all: function () { gBrowser.removeTabs(gBrowser.tabs); }, other: function () { gBrowser.removeAllTabsBut(gBrowser.selectedTab); } }, pin: { current: function () { gBrowser.pinTab(gBrowser.selectedTab); }, all: function (event) { gBrowser.tabs.forEach(t => gBrowser.pinTab(t)); }, }, unpin: { current: function () { gBrowser.unpinTab(gBrowser.selectedTab); }, all: function (event) { gBrowser.tabs.forEach(t => gBrowser.unpinTab(t)); }, }, "toggle-pin": { current: function () { if (gBrowser.selectedTab.pinned) gBrowser.unpinTab(gBrowser.selectedTab); else gBrowser.pinTab(gBrowser.selectedTab); }, all: function (event) { }, }, prev: function () { gBrowser.tabContainer.advanceSelectedTab(-1, true); }, next: function () { gBrowser.tabContainer.advanceSelectedTab(1, true); }, duplicate: function () { duplicateTabIn(gBrowser.selectedTab, 'tab'); } } } window.KeyChanger = { get appVersion() { return Services.appinfo.version.split(".")[0]; }, get FILE() { delete this.FILE; try { path = this.prefs.getStringPref("FILE_PATH") } catch (e) { path = 'local\\_keychanger.js'; } aFile = Services.dirsvc.get("UChrm", Ci.nsIFile); aFile.appendRelativePath(path); if (!aFile.exists()) { saveFile(aFile, ''); alert('_keychanger.js 配置为空'); } return this.FILE = aFile; }, get prefs() { delete this.prefs; return this.prefs = Services.prefs.getBranch("keyChanger.") }, isBuilding: false, _selectedText: "", KEYSETID: "keychanger-keyset", addEventListener: function () { (gBrowser.mPanelContainer || gBrowser.tabpanels).addEventListener("mouseup", this, false); }, handleEvent: function (event) { switch (event.type) { case 'mouseup': try { gBrowser.selectedBrowser.finder.getInitialSelection().then((r) => { this.setSelectedText(r.selectedText); }) } catch (e) { } break; } }, getSelectedText: function () { return this._selectedText || ""; }, setSelectedText: function (text) { this._selectedText = text; }, makeKeyset: function (isAlert) { this.isBuilding = true; var s = new Date(); var keys = this.makeKeys(); if (!keys) { this.isBuilding = false; return this.alert('KeyChanger', 'Load error.'); } $R(document.getElementById(this.KEYSETID)); // 删除 KeySet let keyset = $C(document, "keyset", { id: this.KEYSETID }) keyset.appendChild(keys); var df = document.createDocumentFragment(); Array.prototype.slice.call(document.getElementsByTagName('keyset')).forEach(function (elem) { df.appendChild(elem); }); var insPos = document.getElementById('mainPopupSet'); insPos.parentNode.insertBefore(keyset, insPos); insPos.parentNode.insertBefore(df, insPos); var e = new Date() - s; if (isAlert) { this.alert('KeyChanger: Loaded', e + 'ms'); } setTimeout(function () { KeyChanger.isBuilding = false; }, 100); }, makeKeys: function () { var str = loadText(this.FILE); if (!str) return null; var sandbox = new Components.utils.Sandbox(new XPCNativeWrapper(window)); var keys = Components.utils.evalInSandbox('var keys = {};\n' + str + ';\nkeys;', sandbox); if (!keys) return null; var dFrag = document.createDocumentFragment(); Object.keys(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; 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.createXULElement('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 = keys[n]; switch (typeof cmd) { case 'function': elem.setAttribute('oncommand', '(' + cmd.toString() + ').call(this, event);'); break; case 'object': Object.keys(cmd).forEach(function (a) { if (a === 'oncommand' && cmd[a] === "internal") cmd[a] = "KeyChanger.internalCommand(event);"; elem.setAttribute(a, cmd[a]); }, this); break; default: elem.setAttribute('oncommand', cmd); } dFrag.appendChild(elem); }, this); return dFrag; }, createMenuitem: function () { var menuitem = document.createXULElement('menuitem'); menuitem.setAttribute('id', 'toolsbar_KeyChanger_rebuild'); menuitem.setAttribute('label', 'KeyChanger'); menuitem.setAttribute('tooltiptext', '左键:重载配置\n右键:编辑配置'); menuitem.setAttribute('oncommand', 'setTimeout(function(){ KeyChanger.makeKeyset(true); }, 10);'); menuitem.setAttribute('onclick', 'if (event.button == 2) { event.preventDefault();KeyChanger.edit(KeyChanger.FILE); }'); var insPos = document.getElementById('devToolsSeparator'); insPos.parentNode.insertBefore(menuitem, insPos); }, internalCommand: function (event) { let params = event.target.getAttribute('params'); let cmd = this.internalParamsParse(params); if (typeof cmd === "function") { cmd.call(this, event); } else { this.log("Internal command is not complete or too long", params, cmd); } }, internalParamsParse: function (params) { let args = params.split(','); let cmd = INTERNAL_MAP; for (let i = 0; i < args.length; i++) { if (cmd.hasOwnProperty(args)) { cmd = cmd[args]; } else { return ""; } } return cmd; }, openCommand: function (url, where, postData) { var uri; try { uri = Services.io.newURI(url, null, null); } catch (e) { return this.log("URL 有问题: %s".replace("%s", url)); } if (uri.scheme === "javascript") { try { loadURI(url); } catch (e) { gBrowser.loadURI(url, { triggeringPrincipal: gBrowser.contentPrincipal }); } } else if (where) { try { openUILinkIn(uri.spec, where, false, postData || null); } catch (e) { let aAllowThirdPartyFixup = { postData: postData || null, triggeringPrincipal: where === 'current' ? gBrowser.selectedBrowser.contentPrincipal : ( /^(f|ht)tps?:/.test(uri.spec) ? Services.scriptSecurityManager.createNullPrincipal({}) : Services.scriptSecurityManager.getSystemPrincipal() ) } openUILinkIn(uri.spec, where, aAllowThirdPartyFixup); } } else { let aAllowThirdPartyFixup = { inBackground: false, postData: postData || null, triggeringPrincipal: Services.scriptSecurityManager.createNullPrincipal({}) } openUILinkIn(uri.spec, 'tab', aAllowThirdPartyFixup); } }, edit: function (aFile, aLineNumber) { if (KeyChanger.isBuilding) return; if (!aFile || !aFile.exists() || !aFile.isFile()) return; var editor; try { editor = Services.prefs.getComplexValue("view_source.editor.path", Ci.nsIFile); } catch (e) { } if (!editor || !editor.exists()) { if (useScraptchpad && this.appVersion <= 72) { this.openScriptInScratchpad(window, aFile); return; } else { function setPath() { var fp = Cc['@mozilla.org/filepicker;1'].createInstance(Ci.nsIFilePicker); fp.init(window, "设置全局脚本编辑器", fp.modeOpen); fp.appendFilter("执行文件", "*.exe"); if (typeof fp.show !== 'undefined') { if (fp.show() == fp.returnCancel || !fp.file) return; else { editor = fp.file; Services.prefs.setCharPref("view_source.editor.path", editor.path); } } else { fp.open(res => { if (res != Ci.nsIFilePicker.returnOK) return; editor = fp.file; Services.prefs.setCharPref("view_source.editor.path", editor.path); }); } } KeyChanger.alert("请先设置编辑器的路径!!!", "提示", setPath); } } var aURL = ""; aURL = this.getURLSpecFromFile(aFile); var aDocument = null; var aCallBack = null; var aPageDescriptor = null; gViewSourceUtils.openInExternalEditor({ URL: aURL, lineNumber: aLineNumber }, aPageDescriptor, aDocument, aLineNumber, aCallBack); }, openScriptInScratchpad: function (parentWindow, file) { let spWin = window.openDialog("chrome://devtools/content/scratchpad/index.xul", "Toolkit:Scratchpad", "chrome,dialog,centerscreen,dependent"); spWin.top.moveTo(0, 0); spWin.top.resizeTo(screen.availWidth, screen.availHeight); spWin.addEventListener("load", function spWinLoaded() { spWin.removeEventListener("load", spWinLoaded, false); let Scratchpad = spWin.Scratchpad; Scratchpad.setFilename(file.path); Scratchpad.addObserver({ onReady: function () { Scratchpad.removeObserver(this); Scratchpad.importFromFile.call(Scratchpad, file); } }); }, false); }, exec: function (path, arg) { var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile); var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess); try { var a = (typeof arg == 'string' || arg instanceof String) ? arg.split(/\s+/) : [arg]; file.initWithPath(path); process.init(file); process.run(false, a, a.length); } catch (e) { this.log(e); } }, getURLSpecFromFile(aFile) { var aURL; if (this.appVersion < 92) { aURL = Services.io.getProtocolHandler("file").QueryInterface(Ci.nsIFileProtocolHandler).getURLSpecFromFile(aFile); } else { aURL = Services.io.getProtocolHandler("file").QueryInterface(Ci.nsIFileProtocolHandler).getURLSpecFromActualFile(aFile); } return aURL; }, alert: function (aMsg, aTitle, aCallback) { var callback = aCallback ? { observe: function (subject, topic, data) { if ("alertclickcallback" != topic) return; aCallback.call(null); } } : null; var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService); alertsService.showAlertNotification( "chrome://global/skin/icons/information-32.png", aTitle || "addMenu", aMsg + "", !!callback, "", callback); }, log: function () { Services.console.logStringMessage("[KeyChanger] " + Array.prototype.slice.call(arguments)); }, init: function () { this.createMenuitem(); this.makeKeyset(); this.addEventListener(); } }; function saveFile(fileOrName, data) { var file; if (typeof fileOrName == "string") { file = Services.dirsvc.get('UChrm', Ci.nsIFile); file.appendRelativePath(fileOrName); } else { file = fileOrName; } var suConverter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter); suConverter.charset = 'UTF-8'; data = suConverter.ConvertFromUnicode(data); var foStream = Cc['@mozilla.org/network/file-output-stream;1'].createInstance(Ci.nsIFileOutputStream); foStream.init(file, 0x02 | 0x08 | 0x20, 0664, 0); foStream.write(data, data.length); foStream.close(); } function loadText(aFile) { var fstream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream); var sstream = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(Ci.nsIScriptableInputStream); fstream.init(aFile, -1, 0, 0); sstream.init(fstream); var data = sstream.read(sstream.available()); try { data = decodeURIComponent(escape(data)); } catch (e) { } sstream.close(); fstream.close(); return data; } function $C(aDoc, tag, attrs, skipAttrs) { attrs = attrs || {}; skipAttrs = skipAttrs || []; var el = (aDoc || document).createXULElement(tag); return $A(el, attrs, skipAttrs); } function $A(el, obj, skipAttrs) { skipAttrs = skipAttrs || []; if (obj) Object.keys(obj).forEach(function (key) { if (!skipAttrs.includes(key)) { if (typeof obj[key] === 'function') { el.setAttribute(key, "(" + obj[key].toString() + ").call(this, event);"); } else { el.setAttribute(key, obj[key]); } } }); return el; } function $R(el) { if (!el || !el.parentNode) return; el.parentNode.removeChild(el); } if (gBrowserInit.delayedStartupFinished) window.KeyChanger.init(); else { let delayedListener = (subject, topic) => { if (topic == "browser-delayed-startup-finished" && subject == window) { Services.obs.removeObserver(delayedListener, topic); window.KeyChanger.init(); } }; Services.obs.addObserver(delayedListener, "browser-delayed-startup-finished"); } })(); |
|
5楼#
发布于:2023-09-11 14:08
keys['Shift+F1'] = function () { var document = event.target.ownerDocument; if (!document.getElementById('menu_browserToolbox')) { let { require } = Cu.import("resource://devtools/shared/loader/Loader.jsm", {}); require("devtools/client/framework/devtools-browser"); }; document.getElementById('menu_browserToolbox').click(); }; 这个是shift+F1打开浏览器工具箱,到117失效了,求修复。 |
|
6楼#
发布于:2023-09-11 22:15
|
|
7楼#
发布于:2023-09-12 11:20
编辑掉,回复错了
|
|
8楼#
发布于:2023-09-12 11:21
|
|
9楼#
发布于:2023-09-13 17:18
|
|
10楼#
发布于:2023-09-13 21:50
|
|