Endor:
Jetzt schon. :mrgreen:
Ich habe den Code gerade korrigiert. Anscheinend will der accesskey über setAttribute() zugewiesen werden.
Ist mir allerdings nicht gleich aufgefallen, weil ich in dem Key-Script weiter oben ebenfalls Alt+s benutze.
userChrome.js Scripte für den Fuchs (Diskussion)
-
Endor -
12. Mai 2015 um 14:19 -
Erledigt
-
-
Ja passt.
:klasse:
Vielen Dank!
Mfg.
Endor -
Ich bedanke mich herzlichst bei allen Beteiligten.. :klasse:
-
Ich finde das Skript ViewSourceModoki.uc.js auf der Liste der Skripte, die im FF57 nicht mehr gehen, aber nicht hier im Thema. Es läuft bei mir auch schon im FF52ESR und im FF56 nicht mehr. Bis zum Auswahlfenster geht's, doch dann wird der externe Editor nicht mehr geöffnet. In about:config eingestellt ist er, funktioniert auch für UserCSSLoader.uc.js und für den Kontextmenü-Punkt "Seitenquelltext anzeigen".
Gibt's für das Skript eine Lösung? -
OpenBookModoki in dieser Version (wenn ich mich richtig erinnere von aborix vor einem Jahr gefixt) läuft bei mir im FF52ESR gut, im FF56 nur noch zum Teil. Die Größe des Popups lässt sich nicht mehr verändern und "Lesezeichen löschen" hat keine Funktion mehr. Kann das jemand bestätigen? Und korrigieren?
Code
Alles anzeigen// ==UserScript== // @name openbookModokiFor4.0.uc.js // @namespace https://addons.mozilla.org/firefox/addon/3885 // @description Edit Bookmark Panelにリサイザ追加すると共に, フォルダツリーとタグセレクタのエキスパンダ開閉状態を記憶する。および 設定によりdescription, location, loadInSidebar, keywordを表示/非表示 // @include main // @author Alice0775 // @version 2013/07/07 02:30 fix onFolderMenuListCommand // @version 2012/12/08 22:30 Bug 788290 Bug 788293 Remove E4X // ==/UserScript== // @version 2012/07/24 14:30 Bug 761723 implement toString of function objects by saving source // @version 2010/12/06 10:30 Bug Bug 597557 - Bookmarks & Identity panels should use an Arrowpanel // @version 2010/04/01 00:00 Bug 556342 - Invalid Treeview in bookmark menu via star pane // @version 2009/12/22 00:00 namePickerにフォ-カスあるように // @version 2009/12/21 14:00 BETTER WORKAROUND FIX Bug 536024 - When i expand folder-tree on Edit This Bookmark, the bookmarked folder is changed. // @version 2009/12/20 16:00 WORKAROUND FIX Bug 536024 - When i expand folder-tree on Edit This Bookmark, the bookmarked folder is changed. // @version 2009/08/11 18:00 Tree Style Tab0.8.2009081101のオブジェクト名変更に対応 // @version 2009/08/07 00:00 Tree Style Tab0.8.2009073102があるとき treestyletab-parent-row'を非表示 // @version 2009/08/06 19:00 Tree Style Tab0.8.2009073102があると一瞬Parent Tabが表示されるのを修正,およびuc.jsに変更した // @version 2009/08/06 18:00 Tree Style Tab 0.8.2009073102に対応 // @version 2009/06/24 00:00 Firefox3.5 フォルダツリーとタグセレクタのエキスパンダ開閉状態を記憶しなくなっていたのを修正 // @version 2009/01/02 02:00 設定によりdescription, location, loadInSidebar, keywordを表示/非表示 // @version 2009/01/01 22:28 var openbookResizer = { drag :false, height: null, width : null, eventOffset: null, timer: null, PREHIDEROW : "userChrome.openbook.hideRow", //description, location, loadInSidebar, keyword PREFTREEHEIGHT: "userChrome.openbook.treeHeight", PREFTREEWIDTH : "userChrome.openbook.treeWidth", PREFOPENTREE: "userChrome.openbook.openTree", PREFOPENTAG : "userChrome.openbook.openTag", get tree(){ return gEditItemOverlay._element('folderTree'); }, get getHideRow(){ try { return gPrefService.getCharPref(this.PREHIDEROW).replace(/\s/g,'').slice(','); } catch(e) { return []; } }, get getPrefTreeHeight(){ try { return gPrefService.getIntPref(this.PREFTREEHEIGHT); } catch(e) { return 150; } }, get getPrefTreeWidth(){ try { return gPrefService.getIntPref(this.PREFTREEWIDTH); } catch(e) { return 250; } }, get editBookmarkPanel(){ return document.getElementById('editBookmarkPanel'); }, get treeExpander(){ return gEditItemOverlay._element('foldersExpander'); }, get tagExpander(){ return gEditItemOverlay._element('tagsSelectorExpander'); }, get getPrefOpenTree(){ try { return gPrefService.getBoolPref(this.PREFOPENTREE); } catch(e) { return false; } }, get getPrefOpenTag(){ try { return gPrefService.getBoolPref(this.PREFOPENTAG); } catch(e) { return false; } }, get isFx35(){ return parseInt(Components.classes["@mozilla.org/xre/app-info;1"] .getService(Components.interfaces.nsIXULAppInfo) .version.substr(0,3) * 10, 10) / 10 > 3.0; }, get isFx37(){ parseInt(Components.classes["@mozilla.org/xre/app-info;1"] .getService(Components.interfaces.nsIXULAppInfo) .version.substr(0,3) * 10, 10) / 10 > 3.6; }, init: function(){ if (!window.StarUI) return; //window.removeEventListener('load', this, false); window.addEventListener('unload', this, false); var style = " \ .openbookResizerGripper { \ list-style-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAApklEQVQokY3QK4uCURCA4QeDLCoIXoIYNFiUFVZBq2JQEEx+UcTmpi1b121eosX/a5lg8jvTzsy8M+8cGGKNusQY44QMlRTgAzOcsUqBitH0FVCWpzeNpmZsytUb4oY9qil6BfRxDaiZp1eO5OBl01u9JX7QxiRFr4XfmNbFZ+gdojbCBbt4a6CDP/wH1McDR9SwwB1b+I4bejG1ER8xxwaluHOJ8RM+9xjk9q2RpwAAAABJRU5ErkJggg=='); \ cursor: sw-resize; \ }"; var sspi = document.createProcessingInstruction( 'xml-stylesheet', 'type="text/css" href="data:text/css,' + encodeURIComponent(style) + '"' ); document.insertBefore(sspi, document.documentElement); sspi.getAttribute = function(name) { return document.documentElement.getAttribute(name); }; this.folderTreeRow = this.isFx35 ? "folderTreeRow" : "folderTree"; this.tagsSelectorRow = this.isFx35 ? "tagsSelectorRow" : "tagsSelector"; // default all show StarUI._doShowEditBookmarkPanel = Task.async(function* (aNode, aAnchorElement, aPosition) { if (this.panel.state != "closed") return; this._blockCommands(); this._element("editBookmarkPanelTitle").value = this._isNewBookmark ? gNavigatorBundle.getString("editBookmarkPanel.pageBookmarkedTitle") : gNavigatorBundle.getString("editBookmarkPanel.editBookmarkTitle"); this._element("editBookmarkPanelDescription").textContent = ""; this._element("editBookmarkPanelBottomButtons").hidden = false; this._element("editBookmarkPanelContent").hidden = false; let bookmarks = PlacesUtils.getBookmarksForURI(gBrowser.currentURI); let forms = gNavigatorBundle.getString("editBookmark.removeBookmarks.label"); let label = PluralForm.get(bookmarks.length, forms).replace("#1", bookmarks.length); this._element("editBookmarkPanelRemoveButton").label = label; this._element("editBookmarkPanelStarIcon").removeAttribute("unstarred"); this._itemId = aNode.itemId; this.beginBatch(); if (aAnchorElement) { let parent = aAnchorElement.parentNode; while (parent) { if (parent.localName == "toolbarbutton") break; parent = parent.parentNode; } if (parent) { this._anchorToolbarButton = parent; parent.setAttribute("open", "true"); } } this.panel.openPopup(aAnchorElement, aPosition); gEditItemOverlay.initPanel({ node: aNode , hiddenRows: openbookResizer.getHideRow , focusedElement: "preferred" }); }); // selected tree visible var func = gEditItemOverlay.toggleFolderTreeVisibility.toString(); func = func.replace( 'var currentFolder = this._getFolderIdFromMenuList();', '' ); func = func.replace( /expander.className = "expander-up";*/, 'var currentFolder = this._getFolderIdFromMenuList(); \ var onselect = this._folderTree.getAttribute("onselect"); \ this._folderTree.removeAttribute("onselect"); \ $&;' ); func = func.replace( 'this._folderTree.focus();', '$&; \ setTimeout(function(tree){ \ var start = new Object(); \ var end = new Object(); \ var numRanges = tree.view.selection.getRangeCount(); \ if (numRanges > 0) { \ tree.view.selection.getRangeAt(0,start,end); \ var v = start.value; \ tree.treeBoxObject.ensureRowIsVisible(v); \ } \ tree.setAttribute("onselect", onselect); \ }, 0, this._folderTree);' ); eval("gEditItemOverlay.toggleFolderTreeVisibility = " + func); // selected tree visible func = gEditItemOverlay.onFolderMenuListCommand.toString(); func = func.replace( 'this._folderTree.selectItems([container]);', '{var onselect = this._folderTree.getAttribute("onselect"); \ this._folderTree.removeAttribute("onselect"); \ $&; \ setTimeout(function(tree){ \ var start = new Object(); \ var end = new Object(); \ var numRanges = tree.view.selection.getRangeCount(); \ if (numRanges > 0) { \ tree.view.selection.getRangeAt(0,start,end); \ var v = start.value; \ tree.treeBoxObject.ensureRowIsVisible(v); \ } \ tree.setAttribute("onselect", onselect); \ }, 0, this._folderTree);}' ); eval("gEditItemOverlay.onFolderMenuListCommand = " + func); this.editBookmarkPanel.addEventListener('popupshowing', this, false); this.editBookmarkPanel.addEventListener('popupshown', this, false); this.editBookmarkPanel.addEventListener('popuphiding', this, false); }, uninit: function(){ window.removeEventListener('unload', this, false); this.editBookmarkPanel.removeEventListener('popupshowing', this, false); this.editBookmarkPanel.removeEventListener('popupshown', this, false); this.editBookmarkPanel.removeEventListener('popuphiding', this, false); }, handleEvent: function(event){ switch(event.type){ case 'unload': this.uninit(); break; case 'popupshowing': this.popupshowing(event); break; case 'popupshown': this.popupshown(event); break; case 'popuphiding': this.popuphiding(event); } }, popuphiding: function(event){ if (this.editBookmarkPanel != event.originalTarget) return; var state = !gEditItemOverlay._element(this.folderTreeRow).collapsed; gPrefService.setBoolPref(this.PREFOPENTREE, state); var state = !gEditItemOverlay._element(this.tagsSelectorRow).collapsed; gPrefService.setBoolPref(this.PREFOPENTAG, state); gEditItemOverlay._element(this.folderTreeRow).collapsed = true; gEditItemOverlay._element(this.tagsSelectorRow).collapsed = true; /* // xxx Bug 556342 - Invalid Treeview in bookmark menu via star pane var tree = document.getElementById("editBMPanel_folderTree"); if (!this.isFx37) var result = tree.getResult(); if (result) { result.root.containerOpen = false; } tree.view = null; // xxx } */ }, popupshowing: function(event){ if (this.editBookmarkPanel != event.originalTarget) return; this.tree.height = this.getPrefTreeHeight; //this.tree.width = this.getPrefTreeWidth; //this.editBookmarkPanel.width = this.getPrefTreeWidth; if (!document.getElementById("openbookResizerbottomBox")) { var panel = document.getElementById("editBookmarkPanel"); var innerarrow = document.getAnonymousElementByAttribute(panel, "class", "panel-inner-arrowcontent"); if (innerarrow) innerarrow.setAttribute('flex', 1); var box = document.createElement("hbox"); box.setAttribute('id', 'openbookResizerbottomBox'); box.setAttribute('align',"start"); var resizer = document.createElement("image"); resizer.setAttribute("class", "openbookResizerGripper"); resizer.setAttribute('onmousedown', 'openbookResizer.mousedown(event)'); box.appendChild(resizer); panel.appendChild(box); panel.setAttribute('onmousemove', 'openbookResizer.mousemove(event)'); panel.setAttribute('onmouseup', 'openbookResizer.mouseup(event)'); if ("TreeStyleTabBookmarksServiceEditable" in window) { with (window) eval('gEditItemOverlay._showHideRows = '+window.gEditItemOverlay._showHideRows.toSource().replace( 'TreeStyleTabBookmarksServiceEditable.parentRow.collapsed = this._element("keywordRow").collapsed && this._element("folderRow").collapsed;', '' ).replace( "TreeStyleTabBookmarksServiceEditable.parentRow.collapsed = this._element('keywordRow').collapsed && this._element('folderRow').collapsed;", '' )); {try {TreeStyleTabBookmarksServiceEditable.parentRow.collapsed = true;} catch(e) {}}; } } if ("TreeStyleTabBookmarksServiceEditable" in window) {try {TreeStyleTabBookmarksServiceEditable.parentRow.collapsed = true;} catch(e) {}}; }, popupshown: function(event){ if (this.editBookmarkPanel != event.originalTarget) return; setTimeout(function(self){ if ("TreeStyleTabBookmarksServiceEditable" in window) {try {TreeStyleTabBookmarksServiceEditable.parentRow.collapsed = true;} catch(e) {}}; if (self.getPrefOpenTree && gEditItemOverlay._element(self.folderTreeRow).collapsed ) { gEditItemOverlay.toggleFolderTreeVisibility(); } if (self.getPrefOpenTag && gEditItemOverlay._element(self.tagsSelectorRow).collapsed ) { gEditItemOverlay.toggleTagsSelector(); } try { gEditItemOverlay._element(gPrefService .getCharPref("browser.bookmarks.editDialog.firstEditField")).focus(); } catch(e) {} }, 100, this); }, mousedown: function(event){ this.drag = true; this.height = parseInt(this.tree.boxObject.height); this.width = parseInt(this.editBookmarkPanel.boxObject.width); this.eventOffset = event; }, mousemove: function(event) { if (this.timer) clearTimeout(this.timer); this.timer = setTimeout(function(event, self){ if (self.drag) { // make sure height [150,screen-300] and width is [300,screen-50] var newValue; newValue = self.height + event.pageY - self.eventOffset.pageY; if (newValue <= screen.height - 300 && newValue >= 150) { self.tree.height = newValue; } newValue = self.width - event.pageX + self.eventOffset.pageX; if (newValue <= screen.width - 50 && newValue >= 300) { //self.tree.width = newValue; self.editBookmarkPanel.width = newValue; } } }, 10, event, this); }, mouseup: function(event) { if (this.drag) { gPrefService.setIntPref(this.PREFTREEHEIGHT, this.tree.height); gPrefService.setIntPref(this.PREFTREEWIDTH, this.editBookmarkPanel.boxObject.width); } this.drag = false; } } //window.addEventListener("load", openbookResizer, false); openbookResizer.init();
-
Sind die ganzen neuen Versionen eigentlich in irgend einem Git-Repo?
Auf der Liste https://docs.google.com/spreadsheets/d…zMDg/edit#gid=0 steht externalApplications.uc.js als repariert drinnen, hab es jetzt aber in keinem Repo gefunden - oder ich bin mal wieder blind -
Es dauert manchmal etwas, bis die neuen Versionen hier stehen:
https://github.com/ardiman/userChrome.jsBis dahin stehen die meisten hier:
https://github.com/Endor8/userChr…ster/Firefox-57externalApplications.uc.js hab ich jetzt auch nicht gefunden.
Das ist die neueste Version für Fx 57, die ich habe:Code
Alles anzeigen// ==UserScript== // @name externalApplications.uc.js // @namespace ithinc#mozine.cn // @description External Applications // @include main // @compatibility Firefox 3.5.x 3.6.x 17.01 // @author ithinc // @version 20091216.1.0.0 Final release // @version 20091215.0.0.2 Handle toolbar apps and menu apps separately // @version 20091212.0.0.1 Initial release // ==/UserScript== /* :::: External Applications :::: */ var gExternalApplications = { toolbar: { apps: [ {name: 'Notepad++', path: 'C:\\Program Files (x86)\\Notepad++\\notepad++.exe'}, {name: 'Microsoft Outlook', path: 'C:\\Program Files\\Microsoft Office\\OFFICE14\\Outlook.exe'}, {name: 'Videolan Player', path: 'C:\\Program Files (x86)\\VideoLAN\\Vlc\\vlc.exe'}, {name: 'Windows Explorer', path: 'C:\\Windows\\explorer.exe'}, {name: 'WinMergeU', path: 'C:\\Program Files (x86)\\WinMerge-2.14.0\\WinMergeU.exe'}, {name: 'CarotDAV', path: 'C:\\Program Files (x86)\\CarotDAV\\CarotDAV.exe'}, {name: 'Pickpick', path: 'C:\\Program Files (x86)\\picpick\\picpick.exe'}, ], insertafter: 'menubar-items' //'menubar-items' or 'home-button' }, menu: { apps: [ {name: 'Notepad', path: 'C:\\WINDOWS\\system32\\notepad.exe'}, {name: 'Rechner', path: 'C:\\WINDOWS\\system32\\calc.exe'}, {name: 'DOS', path: 'C:\\WINDOWS\\system32\\cmd.exe'}, {name: 'separator'}, {name: 'UltraSearch', path: 'C:\\Program Files (x86)\\UltraSearch\\UltraSearch.exe'}, {name: 'Windows Explorer', path: 'c:\\windows\\explorer.exe'},/*x为系统盘符*/ {name: 'Internet Explorer', path: 'C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE', args: ['%u']},//外部浏览器打开当前页,使用参数%u ], id: 'ExternalApplicationsMenu', insertafter: 'menu_openAddons', //'helpMenu', 'tools-menu' oder 'browserToolsSeparator' label: 'Externe Anwendungen', accesskey: 'A' }, init: function() { this.handleRelativePath(this.toolbar.apps); this.handleRelativePath(this.menu.apps); if (this.toolbar.apps.length > 0) { var refNode = document.getElementById(this.toolbar.insertafter); if (refNode) { refNode.parentNode.insertBefore(this.createToolbaritem(this.toolbar.apps), refNode.nextSibling); } } if (this.menu.apps.length > 0) { var refNode = document.getElementById(this.menu.insertafter); if (refNode) { var menu = refNode.parentNode.insertBefore(document.createElement('menu'), refNode.nextSibling); menu.setAttribute('id', this.menu.id); menu.setAttribute('label', this.menu.label); menu.setAttribute('accesskey', this.menu.accesskey); menu.appendChild(this.createMenupopup(this.menu.apps)); } } }, handleRelativePath: function(apps) { for (var i=0; i<apps.length; i++) { if (apps[i].path) { apps[i].path = apps[i].path.replace(/\//g, '\\'); var ffdir = Cc['@mozilla.org/file/directory_service;1'].getService(Ci.nsIProperties).get('CurProcD', Ci.nsIFile).path; if (/^(\.)/.test(apps[i].path)) { apps[i].path = ffdir + '\\' + apps[i].path; } else if (/^(\\)/.test(apps[i].path)) { apps[i].path = ffdir.substr(0,2) + apps[i].path; } } } }, exec: function(path, args) { args = args || []; for (var i=0; i<args.length; i++) { args[i] = args[i].replace(/%u/g, gBrowser.currentURI.spec); } var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile); file.initWithPath(path); if (!file.exists()) { Cu.reportError('File Not Found: ' + path); return; } if (!file.isExecutable()) { file.launch(); } else { var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess); process.init(file); process.run(false, args, args.length); } }, createToolbaritem: function(apps) { var toolbaritem = document.createElement('toolbaritem'); toolbaritem.id = 'ExtAppButtons'; toolbaritem.setAttribute('class', 'chromeclass-toolbar-additional'); toolbaritem.setAttribute('orient', 'horizontal'); for (var i=0; i<apps.length; i++) { if (apps[i].name == 'separator') { toolbaritem.appendChild(document.createElement('toolbarseparator')); } else { var item = toolbaritem.appendChild(document.createElement('toolbarbutton')); item.setAttribute('class', 'toolbarbutton-1 chromeclass-toolbar-additional'); item.setAttribute('label', apps[i].name); item.setAttribute('image', 'moz-icon:file://' + apps[i].path + '?size=16;'); item.setAttribute('oncommand', 'gExternalApplications.exec(this.path, this.args);'); item.setAttribute('tooltiptext', apps[i].name); item.setAttribute('style','margin: 0px 0px;background: none;box-shadow: none;border-color: transparent;'); //dawlen add item.path = apps[i].path; item.args = apps[i].args; } } return toolbaritem; }, createMenupopup: function(apps) { var menupopup = document.createElement('menupopup'); for (var i=0; i<apps.length; i++) { if (apps[i].name == 'separator') { menupopup.appendChild(document.createElement('menuseparator')); } else { var item = menupopup.appendChild(document.createElement('menuitem')); item.setAttribute('class', 'menuitem-iconic'); item.setAttribute('label', apps[i].name); item.setAttribute('image', 'moz-icon:file://' + apps[i].path + '?size=16'); item.setAttribute('oncommand', 'gExternalApplications.exec(this.path, this.args);'); item.path = apps[i].path; item.args = apps[i].args; } } return menupopup; } }; gExternalApplications.init();
-
///
Leute ich habe im Moment leider fast keine Zeit dafür.
Rohrbruch + Wasserschaden, Aufräumen und und und und.
Das hat erst mal Vorrang für mich.
Bin glücklicher Weise fast durch. Hoffe bis Sanstag Abend endlich wieder
alles fertig zu haben. Wenn nicht nochwas kaputt geht. Es täte jetzt durchaus reichen.
Schnauze voll von Wasser, Mörtel und co. :grr:
Mfg.
Endor -
Hallo zusammen.
Die neuen Versionen sind bis auf weiteres jetzt auch hier:
externalApplications.uc.js
ExternalApplications_Extended.uc.js -
Hallo,
könnt Ihr bestätigen, dass das Script NewTabButtonUndoTabList nicht funktioniert?
Ich bin nach dieser Anleitung vorgegangen und habe das Script in den chrome-Ordner des Profils kopiert. -
Kann ich bestätigen.
Konosle sagt dazu:CodeReferenceError: gBrowser is not defined[Weitere Informationen] NewTabButtonUndoTabList.uc.js:8:2 <anonym> file:///xxxxx/Profilordner/chrome/NewTabButtonUndoTabList.uc.js:8:2 <anonym> file:///xxxxProfilordner/chrome/NewTabButtonUndoTabList.uc.js:6:2 loadScript/< file://xxxxx/firefox/userChromeJS/utilities.js:112:7
Mfg.
Endor -
Danke für das Posten der Scripte für External_application.
Ich bekomm aber immer folgenden Fehler:
CodeReferenceError: Cc is not defined[Weitere Informationen] External-Aplication.uc.js:34:11 init file:///C:/Users/Lars/AppData/Roaming/Mozilla/Firefox/Profiles/1c05yx0e.default/chrome/External-Aplication.uc.js:34:11 <anonym> file:///C:/Users/Lars/AppData/Roaming/Mozilla/Firefox/Profiles/1c05yx0e.default/chrome/External-Aplication.uc.js:116:1 loadScript/< file:///D:/Program%20Files/Mozilla%20Firefox/userChromeJS.js:109:7
hat da ggf jemand eine Idee?
Andere Scripte laufen jaWas mir dazu auf der Konsole noch auffällt:
-
Ich bekomm aber immer folgenden Fehler: [...]Evtl. mal diese Zeile
Codevar ffdir = Cc['@mozilla.org/file/directory_service;1'].getService(Ci.nsIProperties).get('CurProcD', Ci.nsIFile).path;
gegenCodevar ffdir = Components.classes['@mozilla.org/file/directory_service;1'].getService(Components.interfaces.nsIProperties).get('CurProcD', Components.interfaces.nsIFile).path;
austauschen.
Dann kommt bei mir zwar auch eine Fehlermeldung, aber das könnte an den anderen Scripten liegen.
Es funktioniert aber grundsätzlich.
Hat momentan nichts weiter zu bedeuten. Ist halt veraltet. -
Ich habe mir mal die zwei Scripte externalApplications.uc.js und ExternalApplications_Extended.uc.js angeschaut und selbst ein bisschen gebastelt, um zu lernen. Ich habe allerdings nur eine Button-Version erstellt, weil mich Menüs nicht so interessieren. Getestet mit FF 57 und 58...
Code
Alles anzeigenComponents.utils.import("resource:///modules/CustomizableUI.jsm"); var gExternalApplicationsMod = { apps: [ {name: 'Notepad', path: 'C:\\WINDOWS\\system32\\notepad.exe'}, {name: 'Windows Explorer', path: 'C:\\Windows\\explorer.exe'}, {name: 'Calculator', path: 'C:\\Windows\\System32\\calc.exe'}, {name: 'Command Prompt', path: 'C:\\WINDOWS\\system32\\cmd.exe'}, {name: 'Internet Explorer', path: 'C:\\Program Files\\internet explorer\\iexplore.exe', args: ['%u']}, {name: 'Opera', path: 'C:\\Program Files\\Opera\\launcher.exe', args: ['%u']}, {name: 'Google Chrome', path: 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe', args: ['%u']}, ], init: function() { for (var i=0; i<this.apps.length; i++) { let appsName = this.apps[i].name; let appsPath = this.apps[i].path; let appsArgs = this.apps[i].args; CustomizableUI.createWidget({ id: "fp-app-" + i, defaultArea: CustomizableUI.AREA_NAVBAR, removable: true, label: appsName, tooltiptext: appsName, onClick: function() { gExternalApplicationsMod.exec( appsPath , appsArgs ); }, onCreated: function(aNode) { aNode.setAttribute('image', 'moz-icon:file:///' + appsPath + '?size=16'); return aNode; } }); } }, exec: function(path, args) { args = args || []; for (var i=0; i<args.length; i++) { args[i] = args[i].replace(/%u/g, gBrowser.currentURI.spec); } var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile); file.initWithPath(path); if (!file.exists()) { Cu.reportError('File Not Found: ' + path); return; } if (!file.isExecutable()) { file.launch(); } else { var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess); process.init(file); process.run(false, args, args.length); } } }; gExternalApplicationsMod.init();
-
Zur Info für die Linuxer: Ich habe mal versucht das unter Linux zu verwenden.
Ich habeCodeapps: [ {name: 'Calculator', path: '\/usr\/bin\/kcalc'}, {name: 'Opera', path: '\/usr\/bin\/opera', args: ['%u']}, {name: 'QupZilla', path: '\/usr\/bin\/qupzilla', args: ['%u']}, ],
eingetragen, es klappt...Nur mit dem Erkennen von Änderungen hat mein System so seine Probleme. Wenn ich im Quelltext etwas ändere wird es meist nicht erkannt, es hift jedoch ungemein den Dateinamen der Xxx.uc.js zu ändern! Da bin ich noch am suchen...
Gruß Harry
PS: Ich habe das noch mal überprüft. Wenn ich eine Änderung in der "Xxx.uc.js" Datei mache, z.B. einen neuen Eintrag hinzufüge, wird das nicht übernommen. Weder mit Neustart des FF noch mit Neustart des Rechners. Das muß sich der FF irgendwo merken und nicht überprüfen ob die Datei geändert wurde. Wenn ich jedoch den Dateinamen ändere, wird es sofort beim nächsten Start des FF übernommen, schon ist ein Button mehr da. getestet mit der 58er beta.
PS 2: Wenn ich den Ordner "startupCache" im Profilordner lösche, dann liest der FF die Datei korrekt neu ein! Da ist also der "unsaubere" Cache...
-
Außer händisch löschen gibt es noch andere Möglichkeiten:
- mit Kommandozeile und Parameter starten,
- Neustart-Skript,
zu beidem siehe Skriptcache,- in die userChrome.js am Anfang hineinschreiben:
siehe dazu https://www.camp-firefox.de/forum/viewtopi…053287#p1053287, letzter Abschnitt -
Danke aborix für die Info. Das war auch nur ein Versuch von mir ob es unter Linux auch klappt. Jetzt wird mir so einiges klar - deshalb auch bei dem Neustart-Button die Möglichkeit mit Mittel- oder Rechtsklick den userChrome-js Cache zu leeren? Ich habe aber trotzdem den Eintag in die userChrome.js gemacht.
Gruß Harry
-
Ich habe eine neue Variante, über die config-Datei Skripte auszuführen, die einige Vorteile hat.
Vorweg, die bisherige Methode funktioniert nach wie vor, niemand muss die neue Variante verwenden.So sieht sie aus:
Die config-prefs im Unterordner \defaults\pref des Installationsordners bleibt, wie sie ist.
Die config.js im Installationsordner ist geändert mit diesem Inhalt:Code
Alles anzeigen// // config.js const Cu = Components.utils; try { Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/osfile.jsm"); if (!Services.appinfo.inSafeMode) { let path = OS.Constants.Path.libDir; var ucjsDirPath = OS.Path.join(path, "userChromeJS"); path = OS.Path.join(ucjsDirPath, "main.js"); let mainFileURI = OS.Path.toFileURI(path); Services.scriptloader.loadSubScript(mainFileURI, this, "UTF-8"); }; } catch(e) { Cu.reportError(e); };
Die userChromeJS.js im Installationsordner kommt weg und es kommt ein Ordner userChromeJS hinzu. Er ist hier gezippt angehängt:
userChromeJS.zip
Nach dem Herunterladen entpacken und in den Installationsordner einfügen.
Die Neuerungen:
Die config.js enthält jetzt nur einen Verweis auf den Ordner userChromeJS. Das ist übersichtlicher, vor allem wenn evtl. Code für andere Dinge in die config.js hinzukommt.
Der Ordner enthält allen relevanten Code für die Ausführung der Skripte, teilweise stark vereinfacht gegenüber bisher.
Der Ordner muss nicht im Installationsordner sein, sondern kann sich an einem beliebigen Ort befinden, die Pfadangabe in der config.js muss dann angepasst werden. Genaueres bitte erfragen.Wie in der Erweiterung wird jetzt die Datei userChrome.js angelegt, falls sie nicht vorhanden ist, und enthält dann auch das Readme.
Es ist jetzt möglich, importierte .js-Skripte ohne Verwendung des Skript-Caches direkt aus dem Chrome-Ordner zu laden. Änderungen sind dann ohne Neustart in einem neuen Fenster vorhanden und beim Neustart muss der Skript-Cache nicht geleert werden.
Dazu schreibt man in die userChrome.js folgende Anweisung vor der/den Importanweisung(en):.xul-Skripte werden ohnehin immer aus dem Chrome-Ordner geladen.
Nach Änderungen in der userChrome.js hingegen ist nach wie vor ein Neustart mit Skript-Cache leeren erforderlich.
Im Readme ist das auch beschrieben.hi, wo genau unter Windows 7 finde ich denn den Cache zum löschen ?
-
C:\Users\[Benutzername]\AppData\Local\Mozilla\Firefox\Profiles\[Profilname]\startupCache
-
Danke schön.
-