Prima. ![]()
Mfg.
Endor
Prima. ![]()
Mfg.
Endor
wenn es doof läuft, ist so ein Button einfach weg und die Fehlersuche geht los.
Ja genau das selbe dachte ich mir auch eben.
Mfg.
Endor
Hallo Mira_Belle .
Ja genau so funktioniert es.
Habe mal die ID eom-button vom Script extensionoptionmenu.uc.js da eingetragen
und nun taucht der Button, nach Firefox neustart, genau in diesem Menüpunkt auf
und nicht mehr in der Navigationsleiste.
Ja ich brauch das wahrscheinlich auch nicht.
Ich würde ihn aber auch nur mit CSS ausblenden.
Mfg.
Endor
Hallo. Entschuldigt die späte Antwort.
War unterwegs....
Ich habe mich da auch schon gefragt, was das machen soll.
Es muss mit diesem Absatz zu tun haben:
//メニューが長くなりすぎるので, あまり使わないメニューを"userChrome.jsの各スクリプトの設定"の下に移動させる
//Wenn das Menü zu lang wird, verschieben Sie die Menüeinträge, die Sie nicht oft verwenden, unter „UserChrome.js Script Settings“.
var userChromejsScriptOptionsMenu = {
//あまり使わないメニューのリスト = Liste selten genutzter Menüpunkte
menues: [
"GrabScroll_optionsMenu",
"Patch_XULrubySupportMenu",
"menutabTooltip",
"PipeliningToggle",
"linkInNewTabForSpecifiedPageToolMenu",
"ieviewModokiTool",
"linkloadInBackgroundToolMenu",
"SaveFolderToolsMenu",
"ucjs_copysysinfo-menu"
],
Alles anzeigen
Wie das aber genau gemeint ist, keine Ahnung.
Ich teste da mal etwas. Glaube ja wenn man die ID eines vorhandenen Scripts,
in die Liste einträgt, müsste es dann in diesem Menü auftauchen.
Mal testen.
Mfg.
Endor
So geht es auch:
#userChromejs_options > menu[label='Alle UserScripte in ""'] > menupopup > menuitem[checked="true"]{
background-image: url("..//icons/Sidebar/Gruener-Hacken.png") !important;
background-repeat: no-repeat !important;
background-position: 6px 8px !important;
background-size: 16px 16px !important;
padding-left: 11px !important;}
#userChromejs_options > menu[label='Alle UserScripte in ""'] > menupopup > menuitem:not([checked="true"]){
background-image: url("..//icons/Sidebar/notchecked.png") !important;
background-repeat: no-repeat !important;
background-position: 6px 9px !important;
background-size: 16px 16px !important;}
#userChromejs_options > menu[label='Alle UserScripte in ""'] > menupopup > menuitem:not([checked="true"])>.menu-text{
margin-left: -4px !important;}
#userChromejs_options > menu[label='Alle UserScripte in ""'] > menupopup > menuitem[checked="true"]>.menu-text{
margin-left: -2px !important;}
#userChromejs_options > menu[label='Alle UserScripte in ""'] > menupopup > menuitem[checked="true"]>.menu-icon{
visibility: hidden !important;}
Alles anzeigen
bitte diesen mal testen.
Mfg.
Endor
:nth-child ist mEn nicht ganz optimal.
Ja das stimmt. Darum ging auch mein obiger Code mal wieder nicht.
Leider ist für dieses popup keine id vergeben worden.
Mira_Belle
Habe obigen CSS Code geändert, da du den Separator entfernt hast,
funktionierte er nicht mehr.
Bitte teste den nochmals.
Mfg.
Endor
Hallo Mira_Belle .
Ich habe das hier so gemacht:
#userChromejs_options > menu:nth-child(6) > menupopup:nth-child(4) > menuitem[checked="true"]{
background-image: url("..//icons/Sidebar/Gruener-Hacken.png") !important;
background-repeat: no-repeat !important;
background-position: 6px 8px !important;
background-size: 16px 16px !important;
padding-left: 11px !important;}
#userChromejs_options > menu:nth-child(6) > menupopup:nth-child(4) > menuitem:not([checked="true"]){
background-image: url("..//icons/Sidebar/notchecked.png") !important;
background-repeat: no-repeat !important;
background-position: 6px 9px !important;
background-size: 16px 16px !important;}
#userChromejs_options > menu:nth-child(6) > menupopup:nth-child(4) > menuitem:not([checked="true"])>.menu-text{
margin-left: -3px !important;}
#userChromejs_options > menu:nth-child(6) > menupopup:nth-child(4) > menuitem[checked="true"]>.menu-text{
margin-left: -2px !important;}
#userChromejs_options > menu:nth-child(6) > menupopup:nth-child(4) > menuitem[checked="true"]>.menu-icon{
visibility: hidden !important;}
Alles anzeigen
So wird nur dieses Popup angesprochen.
Icons:
![]()
Da ich Dein Script ja nicht habe, habe dazu das originale Script von alice genommen.
Daraus sind obige Bezeichnungen.
Mfg.
Endor
Die aktuelle Version von alice müsste passen:
wichtig ist nur auch die passende unserChrome.js Datei:
nur mit diesen funktioniert es hier.
Einfache Deutsche Version von rebuild_userChrome.uc.js:
// ==UserScript==
// @name rebuild_userChrome.uc.js
// @namespace http://space.geocities.yahoo.co.jp/gl/alice0775
// @description userChrome.js Skriptcache leeren, neues Fenster öffnen und Script Verwaltung.
// @charset utf-8
// @include main
// @compatibility Firefox 135
// @author Alice0775
// @version 2024/12/22 fix Bug 1936336 - Disallow inline event handlers
// @version 2023/09/07 remove to use nsIScriptableUnicodeConverter
// @version 2023/06/20 remove Bug 1780695 - Remove Services.jsm
// @version 2022/04/01 23:00 Convert Components.utils.import to ChromeUtils.import
// @version 2022/04/01 remove nsIIOService
// @version 2020/04/25 14:00 prevent close menu when middleclick
// Date 2019/05/21 08:30 fix 69.0a1 Bug 1534407 - Enable browser.xhtml by default, Bug 1551320 - Replace all CreateElement calls in XUL documents with CreateXULElement
// @version 2019/04/19 14:00 Fixed 68a1 due to Bug 1519502 - Convert menu bindings to a Custom Element
// @version 2018/04/14 00:00 de XUL
// @version 2017/11/23 23:00 Services :(
// @version 2017/11/14 21:00 use nsIFile instead nsILocalFile
// @version 2017/11/14 21:00 use Services.jsm
// @version 2016/11/28 21:00 remove "for each"
// @version 2015/12/04 24:00 Bug 1177310 [e10s] Stop using CPOWs on application shutdow
// @version 2013/03/20 24:00 force cancel default right click action for unknown modification
// @version 2013/03/22 08:02 Added "use strict"
// @version 2013/03/22 08:01 Fixed commands to work properly, even if menus had been moved into other place
// @version 2013/03/22 08:00 Fixed dragdrop target
// @version 2013/03/20 24:00 autocheck=false for script menu
// @version 2012/11/30 22:00 ubuntu12.04.1 "chromeフォルダを開く" に失敗することがあるのを修正
// ==/UserScript==
// @version 2012/09/30 09:00 ubuntu12.04.1 "chromeフォルダを開く" に失敗することがあるのを修正
// @version 2012/02/25 23:00 restart
// @version 2010/10/25 22:00 Bug 574688 adon bar
// @version 2010/07/04 00:00 nsDragAndDrop
// @version 2009/11/14 00:00 Seamonkeyに対応
// @version 2009/08/24 00:00 Namoroka3.6a2pre で右クリックでのスクリプト編集時にコンテキストメニューが表示されるのを修正
// @version 2009/04/10 00:00 Minefield3.6a1pre での動作改善
// @version 2009/03/27 00:00 nsIProcess変更
// @version 2008/02/25 00:00 reuseのデフォルト値trueに変更
// @version 2008/01/09 02:00 スクリプト保存ファイルピッカーをキャンセル時のエラー処理追加
// @version 2008/01/04 16:00 スクリプトのドロップをstatusbar-display上に変更
// @version 2007/12/15 18:00 base64データスキームの保存に対応
// @version 2007/12/15 02:00 ttp://の保存に対応
// @version 2007/12/15 01:00 メニューが表示されない場合があるのを修正
// @version 2007/12/14 23:00 saveFolderModokiがある時スクリプトのリンクをステータスバーの左1/3にドロップすることで, chrmeホルダに保存するようにした
// @version 2007/12/14 19:00 日本語のファイル名のスクリプトの有効/無効が機能していなかったのを修正
// @version 2007/12/14 17:00 スクリプトの有効/無効/編集を設定できるようにした
// @Note 使用するエディタを編集しておくこと
// @Note Required Sub-Script/Overlay Loader v3.0.38mod( https://github.com/alice0775/userChrome.js/blob/master/userChrome.js )
var userChromejs = {
// --- config ---
editor: (AppConstants.platform == "win")
? "C:\\Program Files\\Notepad++\\notepad++.exe"
: ((AppConstants.platform == "linux")
?"/usr/bin/gedit" /*"/usr/bin/xed"*/
: ""),
// --- config ---
_statusDisplay: null,
get statusDisplay() {
if (!this._statusDisplay)
this._statusDisplay = document.getElementById('status-bar') ||
document.getElementById('statusbar-display');
return this._statusDisplay;
},
_addonbar: null,
get addonbar() {
if (!this._addonbar)
this._addonbar = document.getElementById('addon-bar');
return this._addonbar;
},
handleEvent: function(event) {
switch(event.type) {
case 'dragover':
this.dragover(event);
break;
case 'drop':
this.drop(event);
break;
case 'unload':
this.uninit();
break;
}
},
createElement: function(localName, arryAttribute) {
let elm = document.createXULElement(localName);
for(let i = 0; i < arryAttribute.length; i++) {
elm.setAttribute(arryAttribute[i].attr, arryAttribute[i].value);
}
return elm;
},
init: function(){
window.addEventListener("unload",this , false);
let ref = document.getElementById("menu_preferences");
let menu = ref.parentNode.insertBefore(
this.createElement("menu",
[{attr: "id", value:"userChrome.js_menu"},
{attr: "label", value:"userChrome.js Einstellungen"},
{attr: "accesskey", value:"u"}
]), ref);
let popup = menu.appendChild(this.createElement("menupopup",
[{attr: "id", value:"userChromejs_options"},
/*{attr: "onpopupshowing", value:"userChromejs.onpopup()"},*/
{attr: "context", value:""}
]));
popup.appendChild(this.createElement("menuitem",
[{attr: "id", value:"userChrome_setting"},
{attr: "label", value:"Skript für jedes Fenster neuladen"},
{attr: "accesskey", value:"u"},
/*{attr: "oncommand", value:"userChromejs.setting();"},*/
{attr: "type", value:"checkbox"}
]));
popup.appendChild(this.createElement("menuitem",
[{attr: "id", value:"userChrome_rebuild"},
{attr: "label", value:"userChrome.js/Neues Fenster neu erstellen"},
{attr: "accesskey", value:"x"},
/*{attr: "oncommand", value:"userChromejs.rebuild();"}*/
]));
popup.appendChild(this.createElement("menuitem",
[{attr: "id", value:"userChrome_restartApp"},
{attr: "label", value:"Browser neustarten"},
{attr: "accesskey", value:"r"},
/*{attr: "oncommand", value:"userChromejs.restartApp();"}*/
]));
popup.appendChild(this.createElement("menuitem",
[{attr: "id", value:"userChrome_openChrome"},
{attr: "label", value:"chrome Ordner öffnen"},
{attr: "accesskey", value:"h"},
/*{attr: "oncommand", value:'new Components.Constructor("@mozilla.org/file/local;1","nsIFile", "initWithPath")(Services.dirsvc.get("UChrm", Components.interfaces.nsIFile).path).reveal();'}*/
]));
menu = ref.parentNode.insertBefore(
this.createElement("menu",
[{attr: "id", value:"userChromejs_script_options_Menu"},
{attr: "label", value:"userChrome.js Scripte"},
{attr: "accesskey", value:"s"}
]), ref);
popup = menu.appendChild(this.createElement("menupopup",
[{attr: "id", value:"userChromejs_script_options"}
]));
document.getElementById('userChrome_setting').addEventListener("command", () => userChromejs.setting());
document.getElementById('userChrome_rebuild').addEventListener("command", () => userChromejs.rebuild());
document.getElementById('userChrome_restartApp').addEventListener("command", () => userChromejs.restartApp());
document.getElementById('userChrome_openChrome').addEventListener("command", () => {new Components.Constructor("@mozilla.org/file/local;1","nsIFile", "initWithPath")(Services.dirsvc.get("UChrm", Components.interfaces.nsIFile).path).reveal()});
if (AppConstants.platform == "linux")
userChromejs.onpopup();
if ("nsDragAndDrop" in window && this.statusDisplay) {
this.statusDisplay.addEventListener('dragover',function(event){nsDragAndDrop.dragOver(event,userChromejs.dndObserver);},true);
this.statusDisplay.addEventListener('dragdrop',function(event){nsDragAndDrop.drop(event,userChromejs.dndObserver);},true);
} else if(this.addonbar) {
this.addonbar.addEventListener('dragover', this ,true);
this.addonbar.addEventListener('drop', this ,true);
}
this.addPrefListener(userChromejs.readLaterPrefListener); // 登録処理
document.getElementById("menu_ToolsPopup").addEventListener("popupshowing", function(event) {if (event.target == this) userChromejs.onpopup(event);}, false);
},
uninit: function(){
if ("nsDragAndDrop" in window && this.statusDisplay) {
this.statusDisplay.removeEventListener('dragover',function(event){nsDragAndDrop.dragOver(event,userChromejs.dndObserver);},true);
this.statusDisplay.removeEventListener('dragdrop',function(event){nsDragAndDrop.drop(event,userChromejs.dndObserver);},true);
} else if(this.addonbar) {
this.addonbar.removeEventListener('dragover', this ,true);
this.addonbar.removeEventListener('drop', this ,true);
}
this.removePrefListener(userChromejs.readLaterPrefListener); // 登録解除
},
dragover: function(event) {
var dragService = Cc["@mozilla.org/widget/dragservice;1"]
.getService(Ci.nsIDragService);
var dragSession = dragService.getCurrentSession();
var supportedTypes = ["text/x-moz-url", "text/unicode", "application/x-moz-file"];
for (let type of supportedTypes) {
if (event.dataTransfer.types.contains(type)) {
var data = event.dataTransfer.getData(type);
var url = (/^\s*(.*?)\s*$/m.test(data))
? RegExp.$1 : null;
if (/(\.uc\.js|\.uc\.xul|\.uc\.xul\.txt)$/.test(url)) {
dragSession.canDrop = true;
event.preventDefault();
return;
}
}
}
},
drop: function(event) {
var dragService = Cc["@mozilla.org/widget/dragservice;1"]
.getService(Ci.nsIDragService);
var dragSession = dragService.getCurrentSession();
var supportedTypes = ["text/x-moz-url", "text/unicode", "application/x-moz-file"];
for (let type of supportedTypes) {
if (event.dataTransfer.types.contains(type)) {
var data = event.dataTransfer.getData(type);
this.dndObserver.onDrop(event, {data: data}, dragSession);
return;
}
}
},
dragDropSecurityCheck: function dragDropSecurityCheck(event, dragSession, url) {
if (!url)
return false;
// need to do a security check to make
// sure the source document can load the dropped URI.
url = url.replace(/^\s*|\s*$/g, '');
if (url.indexOf('chrome://') == 0 || url.indexOf('file://') == 0)
return url;
// urlSecurityCheck
try {
urlSecurityCheck(url, gBrowser.contentPrincipal, Ci.nsIScriptSecurityManager.DISALLOW_INHERIT_PRINCIPAL);
}
catch(e) {
event.stopPropagation();
//throw 'Drop of ' + url + ' denied.';
return false;
}
return url;
},
dndObserver: {
getSupportedFlavours : function () {
var flavours = new FlavourSet();
flavours.appendFlavour("text/x-moz-url");
flavours.appendFlavour("text/unicode");
flavours.appendFlavour("application/x-moz-file");
return flavours;
},
onDragOver: function (evt,flavour,session){},
onDrop: function (evt,dropdata,session){
var fname;
evt.stopPropagation();
evt.preventDefault();
if (dropdata.data!=""){
//ステータスバーの左1/3にドロップしたか
var target = evt.target;
while(target){
if(target == userChromejs.statusDisplay ||
target == userChromejs.addonbar)
break;
target = target.parentNode;
}
if(!target) return;
if(evt.screenX > target.boxObject.screenX + target.boxObject.width/3) return;
//saveFolderModokiが必要
if(!saveFolderModoki) return;
//ドロップしたurl
var url = (/^\s*(.*?)\s*$/m.test(dropdata.data))?RegExp.$1:null;
//保存ホルダ nsIFile
var folder = Services.dirsvc.get("UChrm", Components.interfaces.nsIFile);
//デフォルトのファイル名
if(/(.*)\n?(.*)?/m.test(dropdata.data) )
fname = RegExp.$2?RegExp.$2:"";
//データスキームか
if(/(^data:text\/javascript(;.*)?,?)|(^data:application\/x-javascript(;.*)?,?)/.test(url)){
// urlSecurityCheck は saveFolderModoki.directSaveLinkで実施している
saveScript(url, fname, folder);
}else{
//リンクか
if(!/(^h?ttps?:\/\/)|(^ftp:\/\/)/.test(url)) return;
if (/^h?.?.p(s?):(.+)$/i.test(url)){
url = "http" + RegExp.$1 + ':' + RegExp.$2;
if(!RegExp.$2) return null;
fname = url.match(/.+\/(.+)$/)[1];
}
fname = fname.replace(/\.uc\.xul\.txt$/,'.uc.xul');
//スクリプトファイルか?
if(/(\.uc\.js|\.uc\.xul|\.uc\.xul\.txt)$/.test(url)){
if (typeof gBrowser.dragDropSecurityCheck == 'function')
gBrowser.dragDropSecurityCheck(evt, session, url);
else {
userChromejs.dragDropSecurityCheck(evt, session, url)
}
saveScript(url, fname, folder);
}
}
}
function saveScript(url, fname, folder){
//ファイルピッカによりnsIFile決定
var aFile = getFolderPath(fname, folder)
if(!aFile) return;
//フォルダパス
folder = aFile.path.replace(aFile.leafName,'');
//nsILocalFileのフォルダ
var aFolder = saveFolderModoki.initFileWithPath(folder);
if(!aFolder) return;
//リンクを保存
saveFolderModoki.directSaveLink(null, url, aFile.leafName, gBrowser.currentURI, aFolder);
}
function getFolderPath(fname, folder){
//ファイルピッカにより保存先決定
var fp = Components.classes['@mozilla.org/filepicker;1']
.createInstance(Components.interfaces.nsIFilePicker);
fp.init(window, "Save script As", fp.modeSave);
fp.appendFilter("Script Files","*.uc.js; *.uc.xul");
if(/\.uc\.js$/.test(fname)){
fp.defaultExtension = "uc.js";
fp.defaultString = fname;
}else if(/\.uc\.xul$/.test(fname)){
fp.defaultExtension = "uc.xul";
fp.defaultString = fname;
}else{
fp.defaultExtension = "uc.js";
fp.defaultString = fname + ".uc.js";
}
fp.displayDirectory = folder;
if ( fp.show() == fp.returnCancel || !fp.file ) return;
//nsIFile
return fp.file;
}
}
},
rebuild: function(){
var flag = this.getPref("userChrome.enable.reuse",'bool',true);
this.setPref("userChrome.enable.reuse",'bool',false);
setTimeout(function(){OpenBrowserWindow();}, 0);
setTimeout(function(self,flag){self.setPref("userChrome.enable.reuse",'bool',flag);},2000,this,flag);
},
setting: function(){
var flag = this.getPref("userChrome.enable.reuse",'bool',true);
this.setPref("userChrome.enable.reuse",'bool',!flag);
},
onpopup: function(event){
var menu;
var flag = this.getPref("userChrome.enable.reuse",'bool',true);
var menuitem = document.getElementById('userChrome_setting');
menuitem.setAttribute('checked', !flag);
var menupopup = document.getElementById("userChromejs_options");
for(var i = 4, len = menupopup.childNodes.length; i < len; i++){
menupopup.removeChild(menupopup.lastChild);
}
var menuseparator = document.createXULElement('menuseparator');
menupopup.appendChild(menuseparator);
menuitem = document.createXULElement('menuitem');
menuitem.setAttribute('label','userCrome.js Aktivieren/Deaktivieren');
//menuitem.setAttribute('oncommand','userChromejs.chgDirStat("*");');
//menuitem.setAttribute('onclick','userChromejs.clickDirMenuitem(event,true);');
menuitem.setAttribute('type','checkbox');
menuitem.setAttribute('checked', !userChrome_js.dirDisable['*']);
menuitem.dirName = '*';
menupopup.appendChild(menuitem);
menuitem.addEventListener('command', () => userChromejs.chgDirStat("*"));
menuitem.addEventListener('click', (event) => userChromejs.clickDirMenuitem(event,true));
for(var j = 0, lenj = userChrome_js.arrSubdir.length; j < lenj; j++){
var dirName = userChrome_js.arrSubdir[j] == "" ? "root" : userChrome_js.arrSubdir[j];
var flg = false;
for(var i = 0, len = userChrome_js.scripts.length; i < len; i++){
var script = userChrome_js.scripts[i];
if(script.dir != dirName) continue;
flg = true;
break;
}
if(!flg){
for(var i = 0, len = userChrome_js.overlays.length; i < len; i++){
var script = userChrome_js.overlays[i];
if(script.dir != dirName) continue;
flg = true;
break;
}
}
if(!flg) continue;
menu = document.createXULElement('menu');
menu.setAttribute('label','chrome/' + (dirName=="root"?"":dirName) );
menu.addEventListener('click', (event) => userChromejs.clickDirMenu(event));
//menu.setAttribute('onclick','userChromejs.clickDirMenu(event);');
if(userChrome_js.dirDisable[dirName])
menu.setAttribute('style', 'font-style:italic;');
menu.dirName = dirName;
menupopup = document.createXULElement('menupopup');
//menupopup.setAttribute('onpopupshowing','event.stopPropagation();');
menuitem = document.createXULElement('menuitem');
menuitem.setAttribute('label','chrome/' + (dirName=="root"?"":dirName) + ' Aktivieren/Deaktivieren Scripte Chromeordner');
//menuitem.setAttribute('oncommand', 'userChromejs.chgDirStat(this.dirName);');
//menuitem.setAttribute('onclick','userChromejs.clickDirMenuitem(event);');
menuitem.setAttribute('type', 'checkbox');
menuitem.setAttribute('checked', !userChrome_js.dirDisable[dirName]);
menuitem.dirName = dirName;
menupopup.appendChild(menuitem);
menuitem.addEventListener('command', () => userChromejs.chgDirStat(this.dirName));
menuitem.addEventListener('click', (event) => userChromejs.clickDirMenuitem(event));
menuseparator = document.createXULElement('menuseparator');
menupopup.appendChild(menuseparator);
var flg = false;
for(var i = 0, len = userChrome_js.scripts.length; i < len; i++){
var script = userChrome_js.scripts[i];
if(script.dir != dirName) continue;
flg = true;
menuitem = document.createXULElement('menuitem');
menuitem.setAttribute('label',script.filename);
//menuitem.setAttribute('oncommand','userChromejs.chgScriptStat(this.script.filename);');
//menuitem.setAttribute('onclick','userChromejs.clickScriptMenu(event);');
//menuitem.setAttribute('onmouseup','if(event.button == 1) event.preventDefault();');
menuitem.setAttribute('type','checkbox');
menuitem.setAttribute('autocheck','false');
menuitem.setAttribute('checked',!userChrome_js.scriptDisable[script.filename] );
if(script.description)
menuitem.setAttribute('tooltiptext',script.description);
menuitem.script = script;
menupopup.appendChild(menuitem);
menuitem.addEventListener('command', () => userChromejs.chgScriptStat(this.script.filename));
menuitem.addEventListener('click', (event) => userChromejs.clickScriptMenu(event));
menuitem.addEventListener('mouseup', (event) => {if(event.button == 1) event.preventDefault()});
}
for(var i = 0, len = userChrome_js.overlays.length; i < len; i++){
var script = userChrome_js.overlays[i];
if(script.dir != dirName) continue;
if(flg){
menuseparator = document.createXULElement('menuseparator');
menupopup.appendChild(menuseparator);
}
flg = false;
menuitem = document.createXULElement('menuitem');
menuitem.setAttribute('label',script.filename);
//menuitem.setAttribute('oncommand','userChromejs.chgScriptStat(this.script.filename);');
//menuitem.setAttribute('onclick','userChromejs.clickScriptMenu(event);');
//menuitem.setAttribute('onmouseup','if(event.button == 1) event.preventDefault();');
menuitem.setAttribute('type','checkbox');
menuitem.setAttribute('autocheck','false');
menuitem.setAttribute('checked',!userChrome_js.scriptDisable[script.filename] );
if(script.description)
menuitem.setAttribute('tooltiptext',script.description);
menuitem.script = script;
menupopup.appendChild(menuitem);
menuitem.addEventListener('command', () => userChromejs.chgScriptStat(this.script.filename));
menuitem.addEventListener('click', (event) => userChromejs.clickScriptMenu(event));
menuitem.addEventListener('mouseup', (event) => {if(event.button == 1) event.preventDefault()});
}
menu.appendChild(menupopup);
menupopup = document.getElementById("userChromejs_options");
menupopup.appendChild(menu);
}
},
clickDirMenu: function(event){
if(event.button == 1 || event.button == 2){
event.stopPropagation();
event.preventDefault();
userChromejs.chgDirStat(event.target.dirName);
if(event.target.firstChild && event.target.firstChild.firstChild)
event.target.firstChild.firstChild.setAttribute('checked',!userChrome_js.dirDisable[event.target.dirName] );
if(!!userChrome_js.dirDisable[event.target.dirName])
event.target.setAttribute('style', 'font-style:italic;');
else
event.target.removeAttribute('style');
}
},
clickDirMenuitem: function(event,stop){
if(event.button == 1 || event.button == 2){
event.stopPropagation();
event.preventDefault();
userChromejs.chgDirStat(event.target.dirName);
event.target.setAttribute('checked',!userChrome_js.dirDisable[event.target.dirName] );
if(!stop && !!userChrome_js.dirDisable[event.target.dirName])
event.target.parentNode.parentNode.setAttribute('style', 'font-style:italic;');
else
event.target.parentNode.parentNode.removeAttribute('style');
}
},
clickScriptMenu: function(event){
if(event.button==1){
event.stopPropagation();
event.preventDefault();
userChromejs.chgScriptStat(event.target.script.filename);
event.target.setAttribute('checked',!userChrome_js.scriptDisable[event.target.script.filename] );
}else if(event.button==2){
event.stopPropagation();
event.preventDefault();
this.launchEditor(event.target.script);
}
},
launchEditor: function(aScript){
var editor = this.editor;
var path = Services.io.newURI(aScript.url)
.QueryInterface(Ci.nsIFileURL).file.path;
var appfile = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsIFile);
appfile.initWithPath(editor);
var process = Components.classes['@mozilla.org/process/util;1'].createInstance(Components.interfaces.nsIProcess);
process.init(appfile);
process.runw(false, [path], 1, {});
},
chgDirStat: function(adirName){
var s = userChromejs.getPref("userChrome.disable.directory", "str", "");
if(!userChrome_js.dirDisable[adirName]){
s = (s+',').replace(adirName+',','') + adirName+',';
}else{
s = (s+',').replace(adirName+',','');
}
s = s.replace(/,,/g,',').replace(/^,/,'');
userChromejs.setPref("userChrome.disable.directory", "str", s);
userChrome_js.dirDisable = this.restoreState(s.split(','));
},
chgScriptStat: function(afilename){
var s = userChromejs.getPref("userChrome.disable.script", "str", "");
if(!userChrome_js.scriptDisable[afilename]){
s = (s+',').replace(afilename+',','') + afilename+',';
}else{
s = (s+',').replace(afilename+',','');
}
s = s.replace(/,,/g,',').replace(/^,/,'');
userChromejs.setPref("userChrome.disable.script", "str", s);
userChrome_js.scriptDisable = this.restoreState(s.split(','));
},
restoreState: function (arr){
var disable = [];
for(var i = 0,len = arr.length; i < len; i++)
disable[arr[i]] = true;
return disable;
},
//prefを読み込み
getPref: function(aPrefString, aPrefType, aDefault){
var xpPref = Services.prefs;
try {
switch (aPrefType){
case 'complex':
return xpPref.getComplexValue(aPrefString, Components.interfaces.nsIFile); break;
case 'str':
return unescape(xpPref.getCharPref(aPrefString).toString()); break;
case 'int':
return xpPref.getIntPref(aPrefString); break;
case 'bool':
default:
return xpPref.getBoolPref(aPrefString); break;
}
} catch(e) {}
return aDefault;
},
//prefを書き込み
setPref: function(aPrefString, aPrefType, aValue){
var xpPref = Services.prefs;
try {
switch (aPrefType){
case 'complex':
return xpPref.setComplexValue(aPrefString, Components.interfaces.nsIFile, aValue); break;
case 'str':
return xpPref.setCharPref(aPrefString, escape(aValue)); break;
case 'int':
aValue = parseInt(aValue);
return xpPref.setIntPref(aPrefString, aValue); break;
case 'bool':
default:
return xpPref.setBoolPref(aPrefString, aValue); break;
}
} catch(e) {}
return null;
},
// 監視を開始する
addPrefListener: function(aObserver) {
try {
var pbi = Services.prefs;
pbi.addObserver(aObserver.domain, aObserver, false);
} catch(e) {}
},
// 監視を終了する
removePrefListener: function(aObserver) {
try {
var pbi = Services.prefs;
pbi.removeObserver(aObserver.domain, aObserver);
} catch(e) {}
},
readLaterPrefListener:{
domain : 'userChrome.disable',
//"userChrome.disable"という名前の設定が変更された場合全てで処理を行う
observe : function(aSubject, aTopic, aPrefstring) {
if (aTopic == 'nsPref:changed') {
// 設定が変更された時の処理
setTimeout(function(){
var s = userChromejs.getPref("userChrome.disable.directory", "str", "");
userChrome_js.dirDisable = userChromejs.restoreState(s.split(','));
s = userChromejs.getPref("userChrome.disable.script", "str", "");
userChrome_js.scriptDisable = userChromejs.restoreState(s.split(','));
}, 0);
}
}
},
restartApp: function() {
if ("BrowserUtils" in window && typeof BrowserUtils.restartApplication == "function") {
Components.classes["@mozilla.org/xre/app-info;1"]
.getService(Components.interfaces.nsIXULRuntime).invalidateCachesOnRestart();
BrowserUtils.restartApplication();
return;
}
const appStartup = Components.classes["@mozilla.org/toolkit/app-startup;1"]
.getService(Components.interfaces.nsIAppStartup);
// Notify all windows that an application quit has been requested.
var os = Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService);
var cancelQuit = Components.classes["@mozilla.org/supports-PRBool;1"]
.createInstance(Components.interfaces.nsISupportsPRBool);
os.notifyObservers(cancelQuit, "quit-application-requested", null);
// Something aborted the quit process.
if (cancelQuit.data)
return;
// Notify all windows that an application quit has been granted.
os.notifyObservers(null, "quit-application-granted", null);
// Enumerate all windows and call shutdown handlers
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator);
var windows = wm.getEnumerator(null);
var win;
while (windows.hasMoreElements()) {
win = windows.getNext();
if (("tryToClose" in win) && !win.tryToClose())
return;
}
let XRE = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime);
if (typeof XRE.invalidateCachesOnRestart == "function")
XRE.invalidateCachesOnRestart();
appStartup.quit(appStartup.eRestart | appStartup.eAttemptQuit);
}
}
userChromejs.init();
//メニューが長くなりすぎるので, あまり使わないメニューを"userChrome.jsの各スクリプトの設定"の下に移動させる
var userChromejsScriptOptionsMenu = {
//あまり使わないメニューのリスト
menues: [
"GrabScroll_optionsMenu",
"Patch_XULrubySupportMenu",
"menutabTooltip",
"PipeliningToggle",
"linkInNewTabForSpecifiedPageToolMenu",
"ieviewModokiTool",
"linkloadInBackgroundToolMenu",
"SaveFolderToolsMenu",
"ucjs_copysysinfo-menu"
],
interval: 500, //0.5秒間隔
maxcount: 50, //最大50回までトライ
count: 0,
timer: null,
run: function() {
//DOMの構築が完了するのを待ってからメニューを移動させる(5秒間隔で最大50回までトライ)
this.timer = setInterval(function(self){
if (++self.count > self.maxcount || self.moveMenu())
clearInterval(self.timer);
}, this.interval, this);
},
moveMenu: function(){
var menupopup = document.getElementById('userChromejs_script_options');
if (!menupopup)
return false;
var i = 0;
while (i < this.menues.length) {
var menu = document.getElementById(this.menues[i])
if (menu) {
setTimeout(function(menupopup, menu){menupopup.appendChild(menu);}, 100, menupopup, menu);
this.menues.splice(i, 1);
continue;
}
i++;
}
return this.menues.length == 0 ? true : false;
},
}
userChromejsScriptOptionsMenu.run();
Alles anzeigen
Das Script fügt zwei Einträge unter Extras in der Menüleiste ein.
Mfg.
Endor
Gerne.
Falls Du das rebuild_userChrome.uc.js Script von Alice nochmals testen willst
das wäre die aktuellste Version und setzt aber eben die oben erwähnte Datei voraus:
Mfg.
Endor
Hallo Mira_Belle .
Du musst wahrscheinlich anstelle unserer userchrome.js Datei im Chromeordner,
die von alice verwenden, unsere enthält ja nur den zweizeiler, die von alice
hat da einiges mehr, Subscriptloader usw.
Mfg.
Endor
Sidebar Script von Alice siehe hier:
Das ist die neueste Version.
Das Script aus #11
funktioniert hier einwandfrei.
juras
Vielen Dank dafür.
Mfg.
Endor
Meine Version in #10 ist die originale und aktuelle vom Autor alice0775,
nur auf Deutsch übersetzt.
Quelle:
Mfg.
Endor
Es gibt mittlerweile Version 8.9
Download Notepad++ v8.9: security enhancements | Notepad++
Mfg.
Endor
Hallo 2002Andreas.
Das Script tut noch mehr, dies ist nur eine Funktion davon.
Im Tabkontextmenü werden die Untermenüs zum öffnen der zuletzt geschlossenen Tabs und Fenster eingefügt.
Und eben auch der obige Eintrag.
Einen schönen Sonntag und eine tolle Woche wünsche ich Dir.
Mfg.
Endor
Der Eintrag Alle Tabs auflisten kommt von diesem Script:
// ==UserScript==
// @name UndoListInTabmenuToo
// @namespace http://space.geocities.yahoo.co.jp/gl/alice0775
// @description UndoListInTabmenuToo.uc.js
// @include main
// @compatibility Firefox 140
// @author Alice0775
// @version 2025/09/05 mark '*' for current index in the tooltip
// @version 2025/08/06 fix tooltip bug due to the change of 25/01/05
// @version 2025/07/26 add List All Tabs menu
// @version 2025/01/05 remove redundant menuitems
// @version 2025/01/05 fix bug
// @version 2024/12/22 fix Bug 1936336 - Disallow inline event handlers
// @version 2024/08/23 Bug 1690613 - Allow access to url/title/favIconUrl without "tabs" permission in session API
// @version 2023/06/16 08:00 Bug 1819675 - Expand recently closed tabs to include all Windows
// @version 2022/05/10 fix ref to context-media-eme-separator
// @version 2021/12/09 remove JSON.parse (Bug 1733425)
// @version 2021/04/25 fix 1689378
// @version 2019/11/14 remove eval
// @version 2019/06/30 10:00 Bug 1555060 Convert <tabs> to a custom element
// @version 2019/06/24 23:00 wait for gBrowser initialized
// @version 2019/05/21 08:30 fix 69.0a1 Bug 1551320 - Replace all createElement calls in XUL documents with createXULElement
// @version 2018/05/10 60
// @version 2017/11/18 nsIPrefBranch to nsIPrefBranch
// @version 2010/09/18 00:00 4.0b7pre
// @version 2009/02/03 13:00 Tab-Verlauf im Tooltip anzeigen
// @Note Fügt die UndoClose-Tab-Liste zu Tabs und Kontextmenüs hinzu
// @OriginalCode Orginalcode aus browser.js für populateUndoSubmenu verwenden
// @version 2018/05/09 15:00 61
// ==/UserScript==
// @version 2010/03/26 13:00 Minefield/3.7a4pre Bug 554991 - allow tab context menu to be modified by normal XUL overlays
// @version 2010/03/15 00:00 Minefield/3.7a4pre Bug 347930 - Tab strip should be a toolbar instead
// @version 2009/09/09 15:00 Mittelklick-Handhabung
// @version 2009/09/03 22:00 Firefox3.7a1pre Funktion wurde wieder hergestellt. (Bug 489925. getElementById should not return anonymous nodes)
// @version 2009/08/22 00:00 Firefox3.6 Ändern des stringbandle
// @version 2009/04/24 00:00 #394759 [Firefox:Session Restore]-Add undo close window feature
// @version 2008/10/12 18:00 Fx3.0.4pre Mittelklick-Popupmenü wurde nicht geschlossen und andere Korrekturen
// @version 2007/10/05 10:00
var UndoListInTabmenu = {
// -- config --
TABCONTEXTMENU : true , //Im Tabkontextmenü: anzeigen: true, nicht anzeigen: false
CONTEXTMENU : true, //Im Hauptkontextmenü: anzeigen: true , nicht anzeigen: false
// -- config end--
ss: null,
get tabContext() {
return document.getElementById("tabContextMenu");
},
get navigatorBundle() {
return Services.strings.createBundle(
"chrome://browser/locale/browser.properties"
);
},
init: function(){
if (this.TABCONTEXTMENU){
//Tabkontextmenü
var tabContext = this.tabContext;
this.makePopup(tabContext, null, "tabContextUndoList");
}
if (this.CONTEXTMENU){
//Hauptkontextmenü
var contextMenu = document.getElementById("contentAreaContextMenu");
var refItem = document.getElementById("context-media-eme-separator");
this.makePopup(contextMenu, refItem, "ContextUndoList");
}
// get closed-tabs from nsSessionStore
this._ss = SessionStore;
},
makePopup: function(popup, refItem, id){
var menu;
//label
const locale = "de";
// "Recently Closed Windows"
menu = document.createXULElement("menu");
menu.setAttribute("id", "historyUndoWindowMenu3");
menu.setAttribute("label", "K\u00FCrzlich geschlossene Fenster");
menu.setAttribute("accesskey", "F");
menu.setAttribute("disabled", "false");
popup.insertBefore(menu, refItem);
menupopup = document.createXULElement("menupopup");
menu.appendChild(menupopup);
menupopup.setAttribute("id", "historyUndoWindowPopup3");
//menu.setAttribute("onpopupshowing", "UndoListInTabmenu.populateUndoWindowSubmenu(this);");
menupopup.addEventListener("popupshowing", (event) => UndoListInTabmenu.populateUndoWindowSubmenu(event.currentTarget));
//Liste kürzlich geschossener Tabs
const LABELTEXT = "K\u00FCrzlich geschlossene Tabs"; //create menu
menu = document.createXULElement("menu");
menu.setAttribute("label", LABELTEXT);
menu.setAttribute("accesskey", "T");
if (id)
menu.setAttribute("id", id);
//menu.setAttribute("disabled", true);
var menupopup = document.createXULElement("menupopup");
menupopup.addEventListener("popupshowing", () => UndoListInTabmenu.populateUndoSubmenu(menupopup));
//menupopup.setAttribute("onpopupshowing", "UndoListInTabmenu.populateUndoSubmenu(this);");
menu.appendChild(menupopup);
popup.insertBefore(menu, refItem);
//All tabs menu
menu = document.createXULElement("menuitem");
menu.setAttribute("label", "Alle Tabs auflisten");
menu.setAttribute("accesskey", "A");
popup.insertBefore(menu, refItem);
menu.addEventListener("command", (event) => {document.getElementById("alltabs-button").click()})
//add event listener
popup.addEventListener('popupshowing',function(event) {
UndoListInTabmenu.toggleRecentlyClosedWindows(document.getElementById("historyUndoWindowMenu3"));
// no restorable tabs, so make sure menu is disabled, and return
if (UndoListInTabmenu._ss.getClosedTabCount(window) == 0) {
menu.setAttribute("disabled", true);
//menu.setAttribute("hidden", true);
return;
}
menu.removeAttribute("disabled");
//menu.setAttribute("hidden", false);
},false);
},
/**
* Populate when the history menu is opened (Fx3.6)
*/
populateUndoSubmenu: function(undoPopup) {
while (undoPopup.hasChildNodes()) {
undoPopup.removeChild(undoPopup.firstChild);
}
var utils = RecentlyClosedTabsAndWindowsMenuUtils;
var tabsFragment = utils.getTabsFragment(
window,
"menuitem",
/* aPrefixRestoreAll = */ true,
"menu-history-reopen-all-tabs"
);
undoPopup.appendChild(tabsFragment);
// populate tab historis for tooltip
var undoItems = UndoListInTabmenu._ss.getClosedTabDataForWindow(window);
for (var i = 0; i < undoItems.length; i++) {
var entries = undoItems[i].state.entries;
var tooltiptext = "";
for (var j = entries.length - 1; j > -1; j--){
if (j != entries.length - 1)
tooltiptext += "\n";
if (undoItems[i].state.index - 1 !== j) {
tooltiptext += parseInt(j + 1, 10) + ". " + entries[j].title;
} else {
tooltiptext += "*" + ". " + entries[j].title;
}
}
undoPopup.childNodes[i].setAttribute("tooltiptext", tooltiptext);
}
// "Append Clear undo close tb list"
undoPopup.appendChild(document.createXULElement("menuseparator"));
let m = undoPopup.appendChild(document.createXULElement("menuitem"));
m.setAttribute("label", "Liste der letzten Tabs l\u00F6schen");
m.setAttribute("accesskey", "l");
m.addEventListener("command", function() {
let prefs = Services.prefs;
let max_undo = prefs.getIntPref("browser.sessionstore.max_tabs_undo");
prefs.setIntPref("browser.sessionstore.max_tabs_undo", 0);
prefs.setIntPref("browser.sessionstore.max_tabs_undo", max_undo);
}, false);
},
toggleRecentlyClosedWindows: function PHM_toggleRecentlyClosedWindows(menu) {
// enable/disable the Recently Closed Windows sub menu
// no restorable windows, so disable menu
if (this._ss.getClosedWindowCount() == 0)
menu.setAttribute("disabled", true);
else
menu.removeAttribute("disabled");
},
/**
* Populate when the history menu is opened
*/
populateUndoWindowSubmenu: function PHM_populateUndoWindowSubmenu(undoPopup) {
while (undoPopup.hasChildNodes()) {
undoPopup.removeChild(undoPopup.firstChild);
}
let utils = RecentlyClosedTabsAndWindowsMenuUtils;
let windowsFragment = utils.getWindowsFragment(
window,
"menuitem",
/* aPrefixRestoreAll = */ true,
"menu-history-reopen-all-windows"
);
undoPopup.appendChild(windowsFragment);
undoPopup.firstChild.setAttribute("accesskey", "R");
// "Append Clear undo close window list"
undoPopup.appendChild(document.createXULElement("menuseparator"));
m = undoPopup.appendChild(document.createXULElement("menuitem"));
m.setAttribute("label", "Liste der kürzlich geschlossenen Fenster l\u00F6schen");
m.setAttribute("accesskey", "L");
m.addEventListener("command", function() {
for (let i = SessionStore.getClosedWindowCount() -1; i >= 0; i--)
SessionStore.forgetClosedWindow(i);
}, false);
}
};
// We should only start the redirection if the browser window has finished
// starting up. Otherwise, we should wait until the startup is done.
if (gBrowserInit.delayedStartupFinished) {
UndoListInTabmenu.init();
} else {
let delayedStartupFinished = (subject, topic) => {
if (topic == "browser-delayed-startup-finished" &&
subject == window) {
Services.obs.removeObserver(delayedStartupFinished, topic);
UndoListInTabmenu.init();
}
};
Services.obs.addObserver(delayedStartupFinished,
"browser-delayed-startup-finished");
}
Alles anzeigen
Dies nur als Info.
Mfg.
Endor
auf "https://u6.getuploader.com/script/" landet.
Darauf wollte ich dich schon vor Tagen aufmerksam machen.
Für mich der Beweis, der ausgezeichneten Qualität deiner Scripte. ![]()
![]()
![]()
Vielen Dank für Deine tolle Arbeit.
Mfg.
Endor
Hallo Mitleser .
Vielen Dank.
Funktioniert wieder einwandfrei.![]()
![]()
![]()
Vielen Dank!
Mfg.
Endor
Hallo zusammen.
Seit Firefox 145 funktioniert dieses Script:
/* LoadingBar.uc.js */
// Location Bar Enhancer5.1; Loading Bar 0.3.0
(function(){
var cssStr = `
#urlbar-background {
background-image: repeating-linear-gradient(-45deg, rgba(255,255,255,0), rgba(255,255,255,0) 6px, rgba(255,255,255,1) 6px, rgba(255,255,255,1) 12px), linear-gradient(to right, rgba(255,255,255) 0%, rgba(17,238,238,.7) 100%);
background-size:0 0;
background-repeat:repeat-x, no-repeat;
transition: background-size 350ms ease 0s !important;
border-radius: 18px !important;
}
#urlbar {
border-radius: 18px !important;
border: solid 1px #3399ff;
}
#searchbar {
border-color: #3399ff !important;
}
#urlbar-background:not([style="background-size: 0% 100%;"]) {
animation: progress-bar-stripes 2s linear infinite;
}
@keyframes progress-bar-stripes {
from {
background-position: 0 0;
}
to {
background-position: 51px 0;
}
}
`.replace(/\s{2,}|\r|\n/,"");
var style = document.createProcessingInstruction("xml-stylesheet", "type=\"text/css\"" + " href=\"data:text/css;base64," + btoa(cssStr) + "\"");
var mainW = document.getElementById("main-window");
document.insertBefore(style, mainW);
function main(window) {
var {document, gBrowser} = window;
function $(id) { return document.getElementById(id) };
var urlbar = $("urlbar-background");
let pageProgress = 0;
let async = makeWindowHelpers(window).async;
var LoadingBar = {
listener: {
onChangeTab: function(e) {
urlbar.style.backgroundSize = '0% 100%';
pageProgress = 0;
},
onProgressChange: function(aBrowser,webProgress,request,curSelfProgress,maxSelfProgress,curTotalProgress,maxTotalProgress) {
if (gBrowser.contentDocument === aBrowser.contentDocument) {
var val = (curTotalProgress-1)/(maxTotalProgress-1);
pageProgress = val;
urlbar.style.backgroundSize = (100*val) + '% 100%';
if (val > 0.9)
async(function() {
if (pageProgress > 0.95)
urlbar.style.backgroundSize = '100% 100%';
}, 1000);
}
},
onStateChange: function() {
if (pageProgress > 0.95){
async(function() {
urlbar.style.backgroundSize = '0% 100%';
pageProgress = 0;
}, 1000);
}else{
urlbar.style.backgroundSize = '0% 100%';
}
}
}
};
gBrowser.tabContainer.addEventListener('TabSelect',LoadingBar.listener.onChangeTab,false);
gBrowser.addTabsProgressListener(LoadingBar.listener);
unload(function() {
gBrowser.tabContainer.removeEventListener('TabSelect',LoadingBar.listener.onChangeTab,false);
gBrowser.removeTabsProgressListener(LoadingBar.listener);
}, window);
}
watchWindows(main, "navigator:browser");
function runOnLoad(window, callback, winType) {
window.addEventListener("load", function() {
window.removeEventListener("load", arguments.callee, false);
if (window.document.documentElement.getAttribute("windowtype") == winType)
callback(window);
}, false);
}
function runOnWindows(callback, winType) {
function watcher(window) {
try {
callback(window);
}
catch(ex) {}
}
let browserWindows = Services.wm.getEnumerator(winType);
while (browserWindows.hasMoreElements()) {
let browserWindow = browserWindows.getNext();
if (browserWindow.document.readyState == "complete")
watcher(browserWindow);
else
runOnLoad(browserWindow, watcher, winType);
}
}
function watchWindows(callback, winType) {
function watcher(window) {
try {
callback(window);
}
catch(ex) {}
}
runOnWindows(callback, winType);
function windowWatcher(subject, topic) {
if (topic == "domwindowopened")
runOnLoad(subject, watcher, winType);
}
Services.ww.registerNotification(windowWatcher);
unload(function() { Services.ww.unregisterNotification(windowWatcher) });
}
function unload(callback, container) {
let unloaders = unload.unloaders;
if (unloaders == null)
unloaders = unload.unloaders = [];
if (callback == null) {
unloaders.slice().forEach(function(unloader) { unloader() });
unloaders.length = 0;
return null;
}
if (container != null) {
container.addEventListener("unload", removeUnloader, false);
let origCallback = callback;
callback = function() {
container.removeEventListener("unload", removeUnloader, false);
origCallback();
}
}
function unloader() {
try {
callback();
}
catch(ex) {}
}
unloaders.push(unloader);
function removeUnloader() {
let index = unloaders.indexOf(unloader);
if (index != -1)
unloaders.splice(index, 1);
}
return removeUnloader;
}
function makeWindowHelpers(window) {
let {clearTimeout, setTimeout} = window;
function async(callback, delay) {
delay = delay || 0;
let timer = setTimeout(function() {
stopTimer();
callback();
}, delay);
function stopTimer() {
if (timer == null)
return;
clearTimeout(timer);
timer = null;
}
}
return {
async: async,
};
}
})();
Alles anzeigen
leider nicht mehr.
Es fügt der Adressleiste eine Ladeanimation hinzu.
Habt ihr eine Idee wie man das anpassen muss?
Konsole sagt:
Uncaught TypeError: can't access property "style", urlbar is null
onChangeTab file:///C:/Users/xxxx/AppData/Roaming/Mozilla/Firefox/Profiles/u8c46bd1.Firefox 144/chrome/LoadingBar.uc.js:46
updateCurrentBrowser chrome://browser/content/tabbrowser/tabbrowser.js:1550
_setupEventListeners chrome://browser/content/tabbrowser/tabbrowser.js:7837
set selectedIndex chrome://global/content/elements/tabbox.js:238
set selectedPanel chrome://global/content/elements/tabbox.js:248
set selectedIndex chrome://global/content/elements/tabbox.js:736
set selectedItem chrome://global/content/elements/tabbox.js:760
set selectedTab chrome://global/content/elements/tabbox.js:83
set selectedTab chrome://browser/content/tabbrowser/tabbrowser.js:471
LoadingBar.uc.js:46:13
Alles anzeigen
Uncaught TypeError: can't access property "style", urlbar is null
onStateChange file:///C:/Users/xxxx/AppData/Roaming/Mozilla/Firefox/Profiles/u8c46bd1.Firefox 144/chrome/LoadingBar.uc.js:64
timer file:///C:/Users/xxxx/AppData/Roaming/Mozilla/Firefox/Profiles/u8c46bd1.Firefox 144/chrome/LoadingBar.uc.js:179
LoadingBar.uc.js:64:21
Vielen Dank im Voraus für Eure Hilfe.
Mfg.
Endor
Hallo Mira_Belle .
Auch von mir alles Gute zum Geburtstag!
Viel Gesundheit, Glück und Wohlergehen wünsche ich dir
von ganzem Herzen. Bleib gesund.
Viele Grüße
Endor