1. Nachrichten
  2. Forum
    1. Unerledigte Themen
    2. Forenregeln
  3. Spenden
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. camp-firefox.de
  2. GermanFreme82

Beiträge von GermanFreme82

  • [Script] TabProtectmod.uc.js - Firefox 69 Hilfe gesucht !

    • GermanFreme82
    • 10. September 2019 um 18:49

    milupo

    2002Andreas

    Ihr seid erneut die Helden meines Tages, DANKESCHÖN !

    Wenn das so weitergeht, dann kann ich glaube bald aus meiner VMWare ins richtige Windows mit dem neuen Firefox 69 umziehen.

    Mega !!!!!!!!!!!!!

  • [Script] TabProtectmod.uc.js - Firefox 69 Hilfe gesucht !

    • GermanFreme82
    • 10. September 2019 um 18:45
    Zitat von 2002Andreas

    Das Script funktioniert:

    JavaScript
    // ==UserScript==
    // @name           tabProtect_mod2.uc.js
    // @namespace      http://space.geocities.yahoo.co.jp/gl/alice0775
    // @description    tabProtect
    // @include        main
    // @exclude        about:*
    // @author         Alice0775
    // @Note           タブのデタッチ非対応
    // @Note           タスクバーからprivate browsingモードに入るとtabの状態と復帰後のtabのセッション保存おかしくなる
    // @compatibility  69
    // @version        2019/05/29 16:00 Bug 1519514 - Convert tab bindings
    // @version        2019/05/21 08:30 fix 69.0a1 Bug 1551320 - Replace all createElement calls in XUL documents with createXULElement
    // @version        2018/09/27 10:30 fix  tab detach
    // @version        2018/09/26 07:30 support tab detach
    // @version        2018/09/25 21:30 working with tab multi selection
    // @version        2018/06/21 19:50 workaround regression
    // @version        2018/06/21 19:40 fix restore session if *.restore_on_demand is enabled
    // @version        2018/06/10 00:00 workaround restore session
    // @version        2018/05/23 00:00 Fixed typo(status is undeled when unprotect)
    // @version        2018/05/12 15:30 workaround restore session for all window
    // @version        2018/05/06 14:00 workaround for tab move
    // @version        2018/05/04 12:00 cleanup for 60
    // @version        2018/05/04 23:00 for 60
    // ==/UserScript==
    
    var tabProtect = {
      debug: function(aMsg){
              Cc["@mozilla.org/consoleservice;1"]
                .getService(Ci.nsIConsoleService)
                .logStringMessage(aMsg.toString());
      },
    
      sessionStore: {
        get ss() {
          try { 
            return Components.classes["@mozilla.org/browser/sessionstore;1"].
                                   getService(Components.interfaces.nsISessionStore)
          } catch(e) {
            return;
          }
        },
    
        getTabValue : function(aTab, aKey) {
          if (typeof SessionStore.getCustomTabValue == "function")
            return SessionStore.getCustomTabValue(aTab, aKey);
          else
            return this.ss.getTabValue(aTab, aKey);
        },
    
        setTabValue : function(aTab, aKey, aValue) {
          if (typeof SessionStore.setCustomTabValue == "function")
            return SessionStore.setCustomTabValue(aTab, aKey, aValue);
          else
            return this.ss.setTabValue(aTab, aKey, aValue);
    
        },
        deleteTabValue : function(aTab, aKey) {
          if (typeof SessionStore.deleteCustomTabValue == "function")
            return SessionStore.deleteCustomTabValue(aTab, aKey);
          else
            return this.ss.deleteTabValue(aTab, aKey);
        }
      },
    
      get tabContext() {
        return document.getElementById("tabContextMenu");
      },
    
      init: function(){
        console.log("init");
        this.tabContextMenu();
    
        //tabbrowser.xmlを置き換え
        gBrowser.removeTab_org = gBrowser.removeTab;
        gBrowser.removeTab = function(aTab, aParams) {
          if (aTab.localName != "tab")
            aTab = this.selectedTab;
          if (aTab.hasAttribute("tabProtect"))
            return;
          gBrowser.removeTab_org(aTab, aParams);
        }
    
        gBrowser.isProtectTab = function (aTab){
          return aTab.hasAttribute("tabProtect");
        }
    
        gBrowser.protectTab = function (aTab, state) {
          let isProtected;
          if (typeof state == "undefined") {
            if ( aTab.hasAttribute("tabProtect") ){
              state = false;
            } else {
              state = true;
            }
          }
          if (state) {
            aTab.setAttribute("tabProtect", "true");
            tabProtect.sessionStore.setTabValue(aTab, "tabProtect", "true");
            isProtected = true;
          } else {
            aTab.removeAttribute("tabProtect");
            try {
              tabProtect.sessionStore.deleteTabValue(aTab, "tabProtect");
            } catch(e) {}
            isProtected = false;
          }
          this.protectTabIcon(aTab);
          return isProtected;
        }
    
        gBrowser.protectTabIcon = function (aTab){
          const kXULNS =
                   "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
          var image = document.getAnonymousElementByAttribute(
                                   aTab, "class", "tab-icon-protect");
          if ( aTab.hasAttribute("tabProtect") ) {
            if(!image){
              var stack = aTab.querySelector(".tab-stack");
              var image = document.createElementNS(kXULNS,'image');
              image.setAttribute('class','tab-icon-protect');
              image.setAttribute('left',0);
              image.setAttribute('top',0);
              if(stack) stack.appendChild(image);
            }
          }
        }
    
        // CSSを適用
          var style = `
          tab[tabProtect] .tab-close-button {
            display: none;
          }
          tab[tabProtect] .tab-icon-protect{
            margin-top: 0px; /*要調整*/
            margin-left: 0px; /*要調整*/
            list-style-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAQUlEQVQ4jWNgGAXDADASUvDvOsN/fPJMlLqAhRhFTJqo/H/XKXQBsoFEuQDDVnIMQPcGXJxYA3C5hiwvUOwCZAAAlRcK7m+YgB4AAAAASUVORK5CYII=');
          }
          tab:not([tabProtect]) .tab-icon-protect {
            display: none;
          }
    
          `;
        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.restoreAll(0);
        gBrowser.tabContainer.addEventListener('TabMove', this, false);
        gBrowser.tabContainer.addEventListener('SSTabRestoring', this, false);
        window.addEventListener('unload', this, false)
    
        // detach tab
        let func =  gBrowser.swapBrowsersAndCloseOther.toString();
        if (gBrowser && !/copytabProtect/.test(func)) {
          func = func.replace(
            'let otherFindBar = aOtherTab._findBar;',
            `if (aOtherTab.hasAttribute("tabProtect")) {
               aOurTab.ownerGlobal.gBrowser.protectTab(aOurTab, true);
               /*copytabProtect*/
             }
             $&`
           );
          eval("gBrowser.swapBrowsersAndCloseOther = function " + func.replace(/^function/, ''));
        }
      },
    
      restoreAll: function(delay = 0) {
        var that = this;
        setTimeout(init, delay, 0);
        function init(i){
          if(i < gBrowser.tabs.length){
            var aTab = gBrowser.tabs[i];
            that.restoreForTab(aTab);
            i++;
            arguments.callee(i);
          }else{
          }
        }
      },
    
      uninit: function(){
        window.removeEventListener('unload', this, false)
        gBrowser.tabContainer.removeEventListener('SSTabRestoring', this, false);
        gBrowser.tabContainer.removeEventListener('TabMove', this, false);
        this.tabContext.removeEventListener('popupshowing', this, false);
    
      },
    
      handleEvent: function(event) {
        switch(event.type) {
          case "unload":
            this.uninit(event);
            break;
          case "SSTabRestoring":
            this.restore(event);
            break;
          case "TabMove":
            this.TabMove(event);
            break;
          case "popupshowing":
            this.popupshowing(event);
            break;
        }
      },
    
      TabMove: function(aEvent){
        var aTab = aEvent.target;
        gBrowser.protectTabIcon(aTab);
      },
    
      tabContextMenu: function(){
        //tab context menu
        var tabContext = this.tabContext;
        var menuitem = this.tabProtectMenu
                     = tabContext.appendChild(
                            document.createXULElement("menuitem"));
        menuitem.id = "tabProtect";
        menuitem.setAttribute("type", "checkbox");
        if (Services.appinfo.version.split(".")[0] >= 63)
          menuitem.setAttribute("label", "Protect This Tab(s)");
        else
          menuitem.setAttribute("label", "Protect This Tab");
        menuitem.setAttribute("accesskey", "P");
        menuitem.setAttribute("oncommand","tabProtect.toggle(TabContextMenu.contextTab);");
        tabContext.addEventListener('popupshowing', this, false);
      },
    
      popupshowing: function(event) {
        this.setCheckbox(event);
      },
    
      restore: function(event){
        tabProtect.restoreAll(0);
      },
    
      restoreForTab: function(aTab){
        var retrievedData = this.sessionStore.getTabValue(aTab, "tabProtect") == "true";
    console.log("restoreForTab" + retrievedData);
        if(retrievedData){
          aTab.setAttribute('tabProtect',true);
        }
        gBrowser.protectTabIcon(aTab);
      },
    
      toggle: function(aTab){
        if (typeof gBrowser.selectedTabs != "undefined") {
          this.toggleProtectSelectedTabs(this.getSelectedTabs(aTab));
        } else {
          gBrowser.protectTab(aTab);
        }
      },
    
      toggleProtectSelectedTabs: function(tabs){
        if (tabs.length < 1)
          return;
        let isProtect = gBrowser.isProtectTab(tabs[0]);
        for (let tab of tabs) {
            gBrowser.protectTab(tab, !isProtect);
        }
      },
    
      getSelectedTabs: function(aTab){
        let contextTab = aTab;
        let selectedTabs = [contextTab];
        if (gBrowser.selectedTabs.indexOf(contextTab) < 0)
          return selectedTabs;
    
        for (let tab of gBrowser.selectedTabs) {
          if (contextTab != tab)
            selectedTabs.push(tab);
        }
        return selectedTabs;
      },
    
      setCheckbox: function(event){
        var menuitem = this.tabProtectMenu;
        var aTab = TabContextMenu.contextTab;
        if( !aTab || aTab.localName !='tab'){
          menuitem.setAttribute('hidden',true);
          return;
        }
        menuitem.setAttribute('hidden',false);
        if(aTab.hasAttribute('tabProtect') && aTab.getAttribute('tabProtect')){
          menuitem.setAttribute('checked', true);
        }else{
          menuitem.setAttribute('checked', 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) {
        tabProtect.init();
      } else {
        let delayedStartupFinished = (subject, topic) => {
          if (topic == "browser-delayed-startup-finished" &&
              subject == window) {
            Services.obs.removeObserver(delayedStartupFinished, topic);
            tabProtect.init();
          }
        };
        Services.obs.addObserver(delayedStartupFinished,
                                 "browser-delayed-startup-finished");
      }
    Alles anzeigen

    Quelle:

    https://raw.githubusercontent.com/alice0775/user…tect_mod2.uc.js

    Alter Verwalter das geht jaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa manno mein Avatar knuddelt dich !

    Ist ja mega, mit den code läuft es nun supergeil !

  • [Script] TabProtectmod.uc.js - Firefox 69 Hilfe gesucht !

    • GermanFreme82
    • 10. September 2019 um 18:42
    Zitat von milupo
    Zitat von GermanFreme82

    Ok Zeile 170 und 287 sieht nun so aus, aber das Script läuft nicht, was wohl auf einen weiteren Fehler von mir, oder des Script zurückzuführen ist.

    Code
    170 | document.createXULElement("menuitem"));
    287 | var image = document.createElementNS(kXHTMLNS,'image');

    Ja, das ist richtig. Richtig ist auch, dass es trotzdem nicht funktionieren kann. Es gibt da den sogenannten Skript-Cache. Wenn du Änderungen vornimmst, wie in diesem Fall, muss oft der Skript-Cache geleert werden, damit sich die Änderungen auswirken.

    Wir versuchen es erst einmal mit einem weiteren Skript:

    JavaScript
    //        RestartFirefoxButtonM.uc.js
    //        v. 0.3
    
    (function() {
    
       if (location != 'chrome://browser/content/browser.xhtml') return;
        
        try {
            CustomizableUI.createWidget({
                id: 'restart-button',
                type: 'custom',
                defaultArea: CustomizableUI.AREA_NAVBAR,
                onBuild: function(aDocument) {            
                    var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
                    var props = {
                        id: 'restart-button',
                        class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                        label: 'Neustart',
                        tooltiptext: 'Neustart (mit Rechts- und Mittelklick wird userChrome.js-Cache geleert)',
                        style: 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAEZ0FNQQAAsY58%2B1GTAAAAIGNIUk0AAHolAACAgwAA%2Bf8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAN8SURBVHjaVJFNTBxlAIafb2Z29gd2l4VdYCkokAUt1AJplQRTrVqjUWMPPWHSCzb21IOn9qIHY2xMahoTTb00NmkUm5qAjdpUI61VaCxCpCVYixt%2ByvKzCwu7LDs7zMw3HmhM%2Bt6fJ0%2FyCp69wiOzZBCPcqSmIXg0HPHuC4R8nkLWyOXyYiIzfuVHzMIA%2BZsLtH18EApntUdhpzUSD5577nDLi%2FGWKjx%2BHVfR8HpFwNwsxTMzza%2BOXJ1%2B58Ev2sVEV%2ByEawXqxf8FllNWEQ9ePXzsqQOecIDU8jampSAVD76Al2BIIx4Dv2Nz7%2FYq%2B5%2BP8sNXE6WdAhdQlOM9rzUdaGiN8M9UjnKvQjzuA0UjV3AxDIcHywqRoEbXoVrKgyBtKXYEUvprmiN9oaoyvr9wl62NHJbtJeDzOo17YmprVzWOppLO2RRNwf1FSOzSUAXsCIR4QdP13UPfjhUde2mjuBXUjcXNEabOnJmq7Y4Nd7z1fu%2BJ%2FR2Jpgrm0jauAI8GlnSlBi4I0bO6sLBWHc9esxRdmjOZf5n%2B5CLWzCzOvsbKupBZ1xgmElUoC%2BgoKtRGQfNomoaND8P8XS%2Bby1olO7O6GHTl1DejGDOrNB%2BvpO7I%2Ba31%2FDP9Z28YUmqoqhCKcG2EYD6ZMUTojZ8WHmsqD%2BI6wnWFajugCkuuZaV%2FZS47wp99R7E3LbxPV6rtr7dV1pmyuBWs3hr7dZ380LC2tzseffvUHm86C1JC2A%2FrGcn509cn%2BPvTk9ibc1R06qL91Ms1CadF000ll9rVS2VykLzVr0lHOgtpuJ9yUFyXxqhKZjbH2nJRI9IZwyw2kXjvXV%2FIOWgaBcc2a%2BtjdVXR1J3iBDx8QUpQUJAuJJclseogxz441H5vrPO72cm0VSyVPJq27ZaHm8ST3Y0M9d9Kkr19A1A1x4VIObTGBfNrsJ5XmE9b6KqgvrOGhr1Vns2sgeNIkXiigvHf1liZuHWZYjINSEXRVLewZjN6bYmYbvN4rcDvVzFKLnOpErMLBpvbklClznyyyPDA6DjTX3wJWICr%2Bnb3ffjXSGpl5Nxnn88uh2ORUCBaHfVQU%2BsjVuGhKqJT5lFYShr8fGH4j42bH53EnJ4EtgEEPQOTzHx9mqXLl9AT9TS82RvreOmVcMTXVh4JhIr5kp3LFu6u3Lk%2ByMylQazU3ENYAvw3AFUTimFqj5i7AAAAAElFTkSuQmCC)',
                        onclick: 'if (event.button == 1 || event.button == 2) { \
                                        event.preventDefault(); \
                                        Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime). \
                                            invalidateCachesOnRestart(); \
                                     }; \
                                     BrowserUtils.restartApplication();'
                    };                
                    for (var p in props)
                        toolbaritem.setAttribute(p, props[p]);                
                    return toolbaritem;
                }        
            });
            
        } catch(e) { };        
       
    })();
    Alles anzeigen

    Mit diesem Skript kannst du Firefox neu starten (Linksklick) und Firefox neu starten und gleichzeitig den Skript-Cache leeren (Mittelklick oder Rechtsklick). Das Symbol (zwei blaue Pfeile) ist verschiebbar. Das Skript ist bereits an Fx 69 angepasst.

    Coole Sache !

    Hab ich hinzugefügt und jeweils "Linksklick" , Mittelklick und Rechtsklick probiert.

    FF69 ging aus und startet sich neu, aber meine Menü Tabprotect ist noch nicht da.


    Kannst du das mal vlt. bei dir testen, denn bei mir scheint es nicht zu gehen, obwohl es richtig ist, wie du sagst.

  • [Script] TabProtectmod.uc.js - Firefox 69 Hilfe gesucht !

    • GermanFreme82
    • 10. September 2019 um 18:29
    Zitat von milupo

    Ja, das habe ich noch nicht geschrieben: Es darf nur createElement ersetzt werden, nicht createElementNS. Wenn du pauschal ersetzen willst, füge immer die nachfolgende öffnende runde Klammer hinzu:

    Suchen: createElement(

    Ersetzen: createXULElement(

    Dadurch kannst du nicht createElementNS versehentlich mitersetzen. Also bitte nur Zeile 170 ersetzen.

    Ok Zeile 170 und 287 sieht nun so aus, aber das Script läuft nicht, was wohl auf einen weiteren Fehler von mir, oder des Script zurückzuführen ist.

    Code
    170 | document.createXULElement("menuitem"));
    287 | var image = document.createElementNS(kXHTMLNS,'image');

    komplettes Script NEU:

    Code
    // ==UserScript==
    // @name           tabProtect_mod2.uc.js
    // @namespace      http://space.geocities.yahoo.co.jp/gl/alice0775
    // @description    tabProtect
    // @include        main
    // @exclude        about:*
    // @author         Alice0775
    // @Note           ??????????
    // @Note           ???????private browsing???????tab????????tab??????????????
    // @compatibility  60
    // @version        2018/09/27 10:30 fix  tab detach
    // @version        2018/09/26 07:30 support tab detach
    // @version        2018/09/25 21:30 working with tab multi selection
    // @version        2018/06/21 19:50 workaround regression
    // @version        2018/06/21 19:40 fix restore session if *.restore_on_demand is enabled
    // @version        2018/06/10 00:00 workaround restore session
    // @version        2018/05/23 00:00 Fixed typo(status is undeled when unprotect)
    // @version        2018/05/12 15:30 workaround restore session for all window
    // @version        2018/05/06 14:00 workaround for tab move
    // @version        2018/05/04 12:00 cleanup for 60
    // @version        2018/05/04 23:00 for 60
    // ==/UserScript==
    
    var tabProtect = {
      debug: function(aMsg){
              Cc["@mozilla.org/consoleservice;1"]
                .getService(Ci.nsIConsoleService)
                .logStringMessage(aMsg.toString());
      },
    
      sessionStore: {
        get ss() {
          try { 
            return Components.classes["@mozilla.org/browser/sessionstore;1"].
                                   getService(Components.interfaces.nsISessionStore)
          } catch(e) {
            return;
          }
        },
    
        getTabValue : function(aTab, aKey) {
          if (typeof SessionStore.getCustomTabValue == "function")
            return SessionStore.getCustomTabValue(aTab, aKey);
          else
            return this.ss.getTabValue(aTab, aKey);
        },
    
        setTabValue : function(aTab, aKey, aValue) {
          if (typeof SessionStore.setCustomTabValue == "function")
            return SessionStore.setCustomTabValue(aTab, aKey, aValue);
          else
            return this.ss.setTabValue(aTab, aKey, aValue);
    
        },
        deleteTabValue : function(aTab, aKey) {
          if (typeof SessionStore.deleteCustomTabValue == "function")
            return SessionStore.deleteCustomTabValue(aTab, aKey);
          else
            return this.ss.deleteTabValue(aTab, aKey);
        }
      },
    
      init: function(){
        this.tabContextMenu();
    
        //tabbrowser.xml?????
        gBrowser.removeTab_org = gBrowser.removeTab;
        gBrowser.removeTab = function(aTab, aParams) {
          if (aTab.localName != "tab")
            aTab = this.selectedTab;
          if (aTab.hasAttribute("tabProtect"))
            return;
          gBrowser.removeTab_org(aTab, aParams);
        }
    
        // CSS???
        var stack = document.getAnonymousElementByAttribute(
                                gBrowser.tabContainer.firstChild, "class", "tab-stack");
          var style = `
          .tab-close-button[hidden='true'] image {
            width: 0px;
          }
          .tab-icon-protect{
            margin-top: 0px; /*???*/
            margin-left: 0px; /*???*/
            list-style-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAQUlEQVQ4jWNgGAXDADASUvDvOsN/fPJMlLqAhRhFTJqo/H/XKXQBsoFEuQDDVnIMQPcGXJxYA3C5hiwvUOwCZAAAlRcK7m+YgB4AAAAASUVORK5CYII=');
          }
          .tab-icon-protect[hidden='true'] {
            display: none;
          }
          `;
        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.restoreAll(0);
        gBrowser.tabContainer.addEventListener('TabMove', this, false);
        gBrowser.tabContainer.addEventListener('SSTabRestoring', this, false);
        window.addEventListener('unload', this, false)
    
        // detach tab
        let func =  gBrowser.swapBrowsersAndCloseOther.toString();
        if (gBrowser && !/copytabProtect/.test(func)) {
          func = func.replace(
            'let otherFindBar = aOtherTab._findBar;',
            `if (aOtherTab.hasAttribute("tabProtect")) {
               aOurTab.ownerGlobal.gBrowser.protectTab(aOurTab, true);
               /*copytabProtect*/
             }
             $&`
           );
          eval("gBrowser.swapBrowsersAndCloseOther = function " + func.replace(/^function/, ''));
        }
      },
    
      restoreAll: function(delay = 0) {
        var that = this;
        setTimeout(init, delay, 0);
        function init(i){
          if(i < gBrowser.tabs.length){
            var aTab = gBrowser.tabs[i];
            that.restoreForTab(aTab);
            i++;
            arguments.callee(i);
          }else{
          }
        }
      },
    
      uninit: function(){
        window.removeEventListener('unload', this, false)
        gBrowser.tabContainer.removeEventListener('SSTabRestoring', this, false);
        gBrowser.tabContainer.removeEventListener('TabMove', this, false);
        gBrowser.tabContainer.contextMenu.removeEventListener('popupshowing', this, false);
    
      },
    
      handleEvent: function(event) {
        switch(event.type) {
          case "unload":
            this.uninit(event);
            break;
          case "SSTabRestoring":
            this.restore(event);
            break;
          case "TabMove":
            this.TabMove(event);
            break;
          case "popupshowing":
            this.popupshowing(event);
            break;
        }
      },
    
      TabMove: function(aEvent){
        var aTab = aEvent.target;
        gBrowser.protectTabIcon(aTab);
      },
    
      tabContextMenu: function(){
        //tab context menu
        var tabContext = gBrowser.tabContainer.contextMenu;
        var menuitem = this.tabProtectMenu
                     = tabContext.appendChild(
                            document.createXULElement("menuitem"));
        menuitem.id = "tabProtect";
        menuitem.setAttribute("type", "checkbox");
        if (Services.appinfo.version.split(".")[0] >= 63)
          menuitem.setAttribute("label", "Protect This Tab(s)");
        else
          menuitem.setAttribute("label", "Protect This Tab");
        menuitem.setAttribute("accesskey", "P");
        menuitem.setAttribute("oncommand","tabProtect.toggle(TabContextMenu.contextTab);");
        tabContext.addEventListener('popupshowing', this, false);
      },
    
      popupshowing: function(event) {
        this.setCheckbox(event);
      },
    
      restore: function(event){
        tabProtect.restoreAll(0);
      },
    
      restoreForTab: function(aTab){
        var retrievedData = this.sessionStore.getTabValue(aTab, "tabProtect") == "true";
        if(retrievedData){
          aTab.setAttribute('tabProtect',true);
          var closeButton = document.getAnonymousElementByAttribute(
                                 aTab, "anonid", "close-button");
          closeButton.setAttribute('hidden',true);
        }
        gBrowser.protectTabIcon(aTab);
      },
    
      toggle: function(aTab){
        if (typeof gBrowser.selectedTabs != "undefined") {
          this.toggleProtectSelectedTabs(this.getSelectedTabs(aTab));
        } else {
          gBrowser.protectTab(aTab);
        }
      },
    
      toggleProtectSelectedTabs: function(tabs){
        if (tabs.length < 1)
          return;
        let isProtect = gBrowser.isProtectTab(tabs[0]);
        for (let tab of tabs) {
            gBrowser.protectTab(tab, !isProtect);
        }
      },
    
      getSelectedTabs: function(aTab){
        let contextTab = aTab;
        let selectedTabs = [contextTab];
        if (gBrowser.selectedTabs.indexOf(contextTab) < 0)
          return selectedTabs;
    
        for (let tab of gBrowser.selectedTabs) {
          if (contextTab != tab)
            selectedTabs.push(tab);
        }
        return selectedTabs;
      },
    
      setCheckbox: function(event){
        var menuitem = this.tabProtectMenu;
        var aTab = TabContextMenu.contextTab;
        if( !aTab || aTab.localName !='tab'){
          menuitem.setAttribute('hidden',true);
          return;
        }
        menuitem.setAttribute('hidden',false);
        if(aTab.hasAttribute('tabProtect') && aTab.getAttribute('tabProtect')){
          menuitem.setAttribute('checked', true);
        }else{
          menuitem.setAttribute('checked', false);
        }
      }
    }
    
    gBrowser.isProtectTab = function (aTab){
      return aTab.hasAttribute("tabProtect");
    }
    
    gBrowser.protectTab = function (aTab, state) {
      let isProtected;
      if (typeof state == "undefined") {
        if ( aTab.hasAttribute("tabProtect") ){
          state = false;
        } else {
          state = true;
        }
      }
      if (state) {
        aTab.setAttribute("tabProtect", "true");
        tabProtect.sessionStore.setTabValue(aTab, "tabProtect", "true");
        isProtected = true;
      } else {
        aTab.removeAttribute("tabProtect");
        try {
          tabProtect.sessionStore.deleteTabValue(aTab, "tabProtect");
        } catch(e) {}
        isProtected = false;
      }
      this.protectTabIcon(aTab);
      return isProtected;
    }
    
    gBrowser.protectTabIcon = function (aTab){
      const kXHTMLNS =
               "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xhtml";
      var closeButton = document.getAnonymousElementByAttribute(
                      aTab, "anonid", "close-button");
      var image = document.getAnonymousElementByAttribute(
                               aTab, "class", "tab-icon-protect");
      if ( aTab.hasAttribute("tabProtect") ){
        closeButton.setAttribute('hidden',true);
        if(!image){
          var stack = document.getAnonymousElementByAttribute(
                                 aTab, "class", "tab-stack");
          var image = document.createElementNS(kXHTMLNS,'image');
          image.setAttribute('class','tab-icon-protect');
          image.setAttribute('left',0);
          image.setAttribute('top',0);
          if(stack) stack.appendChild(image);
        }
        aTab.setAttribute('class',aTab.getAttribute('class')+' tabProtect');
        image.removeAttribute('hidden');
      }else{
        closeButton.setAttribute('hidden',false);
        if(image){
          image.setAttribute('hidden', true);
        }
        aTab.setAttribute('class',aTab.getAttribute('class').replace(/\stabProtect/g,''));
      }
    }
    
    
    tabProtect.init();
    Alles anzeigen
  • [Script] TabProtectmod.uc.js - Firefox 69 Hilfe gesucht !

    • GermanFreme82
    • 10. September 2019 um 18:15

    Ersetze Vorkommen von browser.xul durch browser.xhtml und Vorkommen von createElement durch createXULElement.

    Ich habe folgende Zeilen finden können, die man ersetzen muß:

    ALT !!!

    Code
    Vorkommen von XUL
    -------------------
    276 | const kXULNS =
    277 | "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
    287 | var image = document.createElementNS(kXULNS,'image');
    
    Vorkommen von "createElement"
    ------------------------------
    170 | document.createElement("menuitem"));
    287 | var image = document.createElementNS(kXHTMLNS,'image');


    NEU !!!

    Code
    Vorkommen von XUL
    -------------------
    276 | tabProtect.sessionStore.deleteTabValue(aTab, "tabProtect");
    277 | "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xhtml";
    287 | var image = document.createXULElementNS(kXHTMLNS,'image');
    
    Vorkommen von "createElement"
    ------------------------------
    170 | document.createXULElement("menuitem"));
    287 | var image = document.createXULElementNS(kXHTMLNS,'image');

    Hab ich das so richtig gemacht, oder sind mir da Fehler unterlaufen und hab ich wohlmöglich ein paar Zeilen übersehen ?

  • Firefox 69 Anpassungen fehlerhaft trotz about:config Änderung

    • GermanFreme82
    • 10. September 2019 um 18:08
    Zitat von milupo
    Zitat von GermanFreme82

    2002Andreas hats mir nochmal gepostet, aber ich hab das schonmal verwendet, da hast du recht, aber irgendwie ging das ja zuvor nicht, aber jetzt nach den ganzen Änerdungen ging es nun wieder einwandfrei ;-).

    Es sind maximal zwei Änderungen und auch jetzt beim Skript TabProtect.uc.js hast du keine Änderung vorgenommen. Schon mal etwas von Suchen und Ersetzen gehört?

    Aber ich gebe dir einen Tipp - schaue mal ins Zeile 170.

    Ich möchte diesen Thread nun gerne abschließen der Übersicht wegen.

    Könntets du mir bitte dort schreiben wegen dem Script => [Script] TabProtectmod.uc.js - Firefox 69 Hilfe gesucht !

    Ich weiß was du meinst bin grad dabei, aber hart am verzweifeln.

  • [Script] TabProtectmod.uc.js - Firefox 69 Hilfe gesucht !

    • GermanFreme82
    • 10. September 2019 um 18:00

    Hallo liebe Firefox-Freunde !

    Wer von euch kenn das Script "TabProtectmod.uc.js" ?

    Unter Firefox 68.0.2 fügt das einen Eintrag ins Kontextmenü für Tabs hinzu, in dem man den Tab an exakt der gleiche Stelle sperren kann,

    ohne in dabei zu verschieben, oder anzupinnen.

    Das finde ich enorm hilfreich, denn ich nutze sehr ungern das anpinnen von Tabs,

    da es mich sehr stört und der Erfinder der Scripts war offensichtlich der gleichen Meinung, wie ich.

    Unter Firefox 68.0.2 funktioniert das einwandfrei, jedoch unter Firefox 69 versagt seine Funktion.

    Auf dem Foto unten siehst du meinen Firefox 68.0.2 mit dem jeweiligen Menü dazu, damit du weißt, wovon ich rede.

    Da ich weder ein Scripter, noch Programmierer bin, kenne ich mich also null aus und bräuchte daher unbedingt eure Hilfe.

    Wer von euch kann mir dabei helfen, das Script "TabProtectmod.uc.js" wieder unter Firefox 69 zum laufen zu bringen ?

    Code
    // ==UserScript==
    // @name           tabProtect_mod2.uc.js
    // @namespace      http://space.geocities.yahoo.co.jp/gl/alice0775
    // @description    tabProtect
    // @include        main
    // @exclude        about:*
    // @author         Alice0775
    // @Note           ??????????
    // @Note           ???????private browsing???????tab????????tab??????????????
    // @compatibility  60
    // @version        2018/09/27 10:30 fix  tab detach
    // @version        2018/09/26 07:30 support tab detach
    // @version        2018/09/25 21:30 working with tab multi selection
    // @version        2018/06/21 19:50 workaround regression
    // @version        2018/06/21 19:40 fix restore session if *.restore_on_demand is enabled
    // @version        2018/06/10 00:00 workaround restore session
    // @version        2018/05/23 00:00 Fixed typo(status is undeled when unprotect)
    // @version        2018/05/12 15:30 workaround restore session for all window
    // @version        2018/05/06 14:00 workaround for tab move
    // @version        2018/05/04 12:00 cleanup for 60
    // @version        2018/05/04 23:00 for 60
    // ==/UserScript==
    
    var tabProtect = {
      debug: function(aMsg){
              Cc["@mozilla.org/consoleservice;1"]
                .getService(Ci.nsIConsoleService)
                .logStringMessage(aMsg.toString());
      },
    
      sessionStore: {
        get ss() {
          try { 
            return Components.classes["@mozilla.org/browser/sessionstore;1"].
                                   getService(Components.interfaces.nsISessionStore)
          } catch(e) {
            return;
          }
        },
    
        getTabValue : function(aTab, aKey) {
          if (typeof SessionStore.getCustomTabValue == "function")
            return SessionStore.getCustomTabValue(aTab, aKey);
          else
            return this.ss.getTabValue(aTab, aKey);
        },
    
        setTabValue : function(aTab, aKey, aValue) {
          if (typeof SessionStore.setCustomTabValue == "function")
            return SessionStore.setCustomTabValue(aTab, aKey, aValue);
          else
            return this.ss.setTabValue(aTab, aKey, aValue);
    
        },
        deleteTabValue : function(aTab, aKey) {
          if (typeof SessionStore.deleteCustomTabValue == "function")
            return SessionStore.deleteCustomTabValue(aTab, aKey);
          else
            return this.ss.deleteTabValue(aTab, aKey);
        }
      },
    
      init: function(){
        this.tabContextMenu();
    
        //tabbrowser.xml?????
        gBrowser.removeTab_org = gBrowser.removeTab;
        gBrowser.removeTab = function(aTab, aParams) {
          if (aTab.localName != "tab")
            aTab = this.selectedTab;
          if (aTab.hasAttribute("tabProtect"))
            return;
          gBrowser.removeTab_org(aTab, aParams);
        }
    
        // CSS???
        var stack = document.getAnonymousElementByAttribute(
                                gBrowser.tabContainer.firstChild, "class", "tab-stack");
          var style = `
          .tab-close-button[hidden='true'] image {
            width: 0px;
          }
          .tab-icon-protect{
            margin-top: 0px; /*???*/
            margin-left: 0px; /*???*/
            list-style-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAQUlEQVQ4jWNgGAXDADASUvDvOsN/fPJMlLqAhRhFTJqo/H/XKXQBsoFEuQDDVnIMQPcGXJxYA3C5hiwvUOwCZAAAlRcK7m+YgB4AAAAASUVORK5CYII=');
          }
          .tab-icon-protect[hidden='true'] {
            display: none;
          }
          `;
        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.restoreAll(0);
        gBrowser.tabContainer.addEventListener('TabMove', this, false);
        gBrowser.tabContainer.addEventListener('SSTabRestoring', this, false);
        window.addEventListener('unload', this, false)
    
        // detach tab
        let func =  gBrowser.swapBrowsersAndCloseOther.toString();
        if (gBrowser && !/copytabProtect/.test(func)) {
          func = func.replace(
            'let otherFindBar = aOtherTab._findBar;',
            `if (aOtherTab.hasAttribute("tabProtect")) {
               aOurTab.ownerGlobal.gBrowser.protectTab(aOurTab, true);
               /*copytabProtect*/
             }
             $&`
           );
          eval("gBrowser.swapBrowsersAndCloseOther = function " + func.replace(/^function/, ''));
        }
      },
    
      restoreAll: function(delay = 0) {
        var that = this;
        setTimeout(init, delay, 0);
        function init(i){
          if(i < gBrowser.tabs.length){
            var aTab = gBrowser.tabs[i];
            that.restoreForTab(aTab);
            i++;
            arguments.callee(i);
          }else{
          }
        }
      },
    
      uninit: function(){
        window.removeEventListener('unload', this, false)
        gBrowser.tabContainer.removeEventListener('SSTabRestoring', this, false);
        gBrowser.tabContainer.removeEventListener('TabMove', this, false);
        gBrowser.tabContainer.contextMenu.removeEventListener('popupshowing', this, false);
    
      },
    
      handleEvent: function(event) {
        switch(event.type) {
          case "unload":
            this.uninit(event);
            break;
          case "SSTabRestoring":
            this.restore(event);
            break;
          case "TabMove":
            this.TabMove(event);
            break;
          case "popupshowing":
            this.popupshowing(event);
            break;
        }
      },
    
      TabMove: function(aEvent){
        var aTab = aEvent.target;
        gBrowser.protectTabIcon(aTab);
      },
    
      tabContextMenu: function(){
        //tab context menu
        var tabContext = gBrowser.tabContainer.contextMenu;
        var menuitem = this.tabProtectMenu
                     = tabContext.appendChild(
                            document.createElement("menuitem"));
        menuitem.id = "tabProtect";
        menuitem.setAttribute("type", "checkbox");
        if (Services.appinfo.version.split(".")[0] >= 63)
          menuitem.setAttribute("label", "Protect This Tab(s)");
        else
          menuitem.setAttribute("label", "Protect This Tab");
        menuitem.setAttribute("accesskey", "P");
        menuitem.setAttribute("oncommand","tabProtect.toggle(TabContextMenu.contextTab);");
        tabContext.addEventListener('popupshowing', this, false);
      },
    
      popupshowing: function(event) {
        this.setCheckbox(event);
      },
    
      restore: function(event){
        tabProtect.restoreAll(0);
      },
    
      restoreForTab: function(aTab){
        var retrievedData = this.sessionStore.getTabValue(aTab, "tabProtect") == "true";
        if(retrievedData){
          aTab.setAttribute('tabProtect',true);
          var closeButton = document.getAnonymousElementByAttribute(
                                 aTab, "anonid", "close-button");
          closeButton.setAttribute('hidden',true);
        }
        gBrowser.protectTabIcon(aTab);
      },
    
      toggle: function(aTab){
        if (typeof gBrowser.selectedTabs != "undefined") {
          this.toggleProtectSelectedTabs(this.getSelectedTabs(aTab));
        } else {
          gBrowser.protectTab(aTab);
        }
      },
    
      toggleProtectSelectedTabs: function(tabs){
        if (tabs.length < 1)
          return;
        let isProtect = gBrowser.isProtectTab(tabs[0]);
        for (let tab of tabs) {
            gBrowser.protectTab(tab, !isProtect);
        }
      },
    
      getSelectedTabs: function(aTab){
        let contextTab = aTab;
        let selectedTabs = [contextTab];
        if (gBrowser.selectedTabs.indexOf(contextTab) < 0)
          return selectedTabs;
    
        for (let tab of gBrowser.selectedTabs) {
          if (contextTab != tab)
            selectedTabs.push(tab);
        }
        return selectedTabs;
      },
    
      setCheckbox: function(event){
        var menuitem = this.tabProtectMenu;
        var aTab = TabContextMenu.contextTab;
        if( !aTab || aTab.localName !='tab'){
          menuitem.setAttribute('hidden',true);
          return;
        }
        menuitem.setAttribute('hidden',false);
        if(aTab.hasAttribute('tabProtect') && aTab.getAttribute('tabProtect')){
          menuitem.setAttribute('checked', true);
        }else{
          menuitem.setAttribute('checked', false);
        }
      }
    }
    
    gBrowser.isProtectTab = function (aTab){
      return aTab.hasAttribute("tabProtect");
    }
    
    gBrowser.protectTab = function (aTab, state) {
      let isProtected;
      if (typeof state == "undefined") {
        if ( aTab.hasAttribute("tabProtect") ){
          state = false;
        } else {
          state = true;
        }
      }
      if (state) {
        aTab.setAttribute("tabProtect", "true");
        tabProtect.sessionStore.setTabValue(aTab, "tabProtect", "true");
        isProtected = true;
      } else {
        aTab.removeAttribute("tabProtect");
        try {
          tabProtect.sessionStore.deleteTabValue(aTab, "tabProtect");
        } catch(e) {}
        isProtected = false;
      }
      this.protectTabIcon(aTab);
      return isProtected;
    }
    
    gBrowser.protectTabIcon = function (aTab){
      const kXULNS =
               "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
      var closeButton = document.getAnonymousElementByAttribute(
                      aTab, "anonid", "close-button");
      var image = document.getAnonymousElementByAttribute(
                               aTab, "class", "tab-icon-protect");
      if ( aTab.hasAttribute("tabProtect") ){
        closeButton.setAttribute('hidden',true);
        if(!image){
          var stack = document.getAnonymousElementByAttribute(
                                 aTab, "class", "tab-stack");
          var image = document.createElementNS(kXULNS,'image');
          image.setAttribute('class','tab-icon-protect');
          image.setAttribute('left',0);
          image.setAttribute('top',0);
          if(stack) stack.appendChild(image);
        }
        aTab.setAttribute('class',aTab.getAttribute('class')+' tabProtect');
        image.removeAttribute('hidden');
      }else{
        closeButton.setAttribute('hidden',false);
        if(image){
          image.setAttribute('hidden', true);
        }
        aTab.setAttribute('class',aTab.getAttribute('class').replace(/\stabProtect/g,''));
      }
    }
    
    
    tabProtect.init();
    Alles anzeigen

    Bilder

    • aaa.jpg
      • 50,26 kB
      • 740 × 496
  • Firefox 69 Anpassungen fehlerhaft trotz about:config Änderung

    • GermanFreme82
    • 10. September 2019 um 17:50
    Zitat von milupo
    Zitat von GermanFreme82
    Zitat von 2002Andreas

    Dafür brauchst du ein weiteres Script;)

    JavaScript
    //    HideTabbarWithOneTab.uc.js
    //    v. 0.1
    
    Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).setBoolPref("browser.tabs.drawInTitlebar", false);
    var tabbar = document.getElementById("TabsToolbar");    
    function showHideTabbar (mutations) {
        tabbar.collapsed = (gBrowser.visibleTabs.length == 1);
    };            
    showHideTabbar();                        
    var observer = new MutationObserver(showHideTabbar);        
    observer.observe(document.querySelector('#tabbrowser-tabs'), {attributes: true});
    Alles anzeigen

    Hab ich eben gemacht und eeeeendlich ... ach ist das herrlich, es funktioniert.

    Jetzt hab ich meine Leiste unten mit den Symbolen und die Tableiste ist wo sie sein sollte.

    siehe Video im Anhang !

    Hast du denn das Skript wiedererkannt? Schaue mal in deinen Beitrag #10.

    2002Andreas hats mir nochmal gepostet, aber ich hab das schonmal verwendet, da hast du recht, aber irgendwie ging das ja zuvor nicht, aber jetzt nach den ganzen Änerdungen ging es nun wieder einwandfrei ;-).

  • Firefox 69 Anpassungen fehlerhaft trotz about:config Änderung

    • GermanFreme82
    • 10. September 2019 um 17:39

    milupo

    2002Andreas

    Endor

    und alle anderen, ich DANKE euch !

    Ihr seid super und es ist sooo mega, das es nun endlich funktioniert, mit eurer Hilfe !

  • Firefox 69 Anpassungen fehlerhaft trotz about:config Änderung

    • GermanFreme82
    • 10. September 2019 um 17:38
    Zitat von 2002Andreas
    Zitat von GermanFreme82

    mit dem man die Tableiste verstecken kann, wenn nur 1 Tab geöffnet ist.

    Dafür brauchst du ein weiteres Script;)

    JavaScript
    //    HideTabbarWithOneTab.uc.js
    //    v. 0.1
    
    Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).setBoolPref("browser.tabs.drawInTitlebar", false);
    var tabbar = document.getElementById("TabsToolbar");    
    function showHideTabbar (mutations) {
        tabbar.collapsed = (gBrowser.visibleTabs.length == 1);
    };            
    showHideTabbar();                        
    var observer = new MutationObserver(showHideTabbar);        
    observer.observe(document.querySelector('#tabbrowser-tabs'), {attributes: true});
    Alles anzeigen

    Hab ich eben gemacht und eeeeendlich ... ach ist das herrlich, es funktioniert.

    Jetzt hab ich meine Leiste unten mit den Symbolen und die Tableiste ist wo sie sein sollte.

    siehe Video im Anhang !

    Dateien

    2019-09-10 17-35-35.zip 508,31 kB – 172 Downloads
  • Firefox 69 Anpassungen fehlerhaft trotz about:config Änderung

    • GermanFreme82
    • 10. September 2019 um 17:34
    Zitat von 2002Andreas

    Und das:

    @import url('css/ffc-styles.css');

    kannst du löschen.

    Der Code funktioniert eh nicht mehr.

    Jawohl chef wird gemacht ;) !

  • Firefox 69 Anpassungen fehlerhaft trotz about:config Änderung

    • GermanFreme82
    • 10. September 2019 um 17:14

    so und so siehts aus, wenn ich meine userChrome.css in userChrome.txt ändere und FF69 starte.

    Meine Tableiste ist noch genau wo ich sie haben will, cool, nur die Tabs sehen wieder eckig aus und haben nicht meinen Style (logisch ohne CSS).

    Bilder

    • 9999.jpg
      • 125,33 kB
      • 1.920 × 993
  • Firefox 69 Anpassungen fehlerhaft trotz about:config Änderung

    • GermanFreme82
    • 10. September 2019 um 17:12
    Zitat von milupo
    Zitat von 2002Andreas

    Was genau steht denn in der userChrome.css drin jetzt?

    Ich hatte doch geschrieben, die soll er umbenennen in userChrome.txt, um CSS-Einfluss auszuschließen. Nun hat er wieder eine userChrome.css. Er macht eben, was er will.

    Hä du hast doch gesagt, ich soll die nur umbenennen, um sie hier zu posten, wegen der Fehleruote und so.

    Dachte nicht du meinst sollte sie abstellen für Firefox.

    Gut mach ich sofort, dann sind aber alle Angaben unwirksam die darin stehen, aber bitte mach ich gerne.

  • Firefox 69 Anpassungen fehlerhaft trotz about:config Änderung

    • GermanFreme82
    • 10. September 2019 um 17:07

    userChrome.CSS

    CSS
    @import url('css/ffc-styles.css');
    #context-openlink,
    #context-openlinkprivate,
    #context-bookmarklink,
    #context-sendlinktodevice,
    #context-inspect,
    #context-openlinkinusercontext-menu,
    #context-viewpartialsource-selection,
    #context-sep-sendlinktodevice,
    #inspect-separator,
    #_lympha-menuitem-_lympha-ctx-btn{
        display:none!important;
    }
    #contentAreaContextMenu > menuseparator:nth-child(93){
        display:none!important;
    }
    #jid1-kdtticj6wxvafa_jetpack-menuitem-_sss{
        -moz-box-ordinal-group: 100 !important;
    }
    #context-sendpagetodevice,
    #context-viewbgimage,
    #context-selectall,
    #context-viewsource,
    #context-sep-sendpagetodevice,
    #context-sep-viewbgimage,
    #contentAreaContextMenu > menuseparator:nth-child(93){
        display:none!important;
    }
    #context-sendimage,
    #context-setDesktopBackground,
    #inspect-separator{
        display:none!important;
    }
    .tab-line[selected] { 
        display:none!important;
    }
    #TabsToolbar .tabbrowser-tab:only-of-type {
      display: none !important;
    }
    
    #TabsToolbar {
    margin-bottom:1px!important;
          }
    
    .tabbrowser-tab:not([selected="true"]){
      background: #C39D74 !important; 
      border-radius: 80px !important; 
      border:0px solid black !important;
          }
    
    .tab-background[selected="true"] {
      background: #F09800 !important; 
      border-radius: 80px !important; 
      border:0px solid black!important;
          }
    
    .tabbrowser-tab::after, .tabbrowser-tab::before {
        margin-inline-start: 0px!important;
        border-left: 0px solid!important;
        border-image:none!important;
        border-image-slice: 0!important;
        width: 0px!important;
        box-sizing: border-box;
        opacity: 0!important;
          }
        
    .tab-line { 
        display:none!important
          }
          
          .tabbrowser-tab{
              margin-right:5px!important;
          }
          
          menuitem[label="TextNotes"] {
         display: none !important;
         }   
         #testing_duckduckgo_com-menuitem-1 {
        display: none !important;
        }
    Alles anzeigen
  • Firefox 69 Anpassungen fehlerhaft trotz about:config Änderung

    • GermanFreme82
    • 10. September 2019 um 17:06
    Zitat von milupo
    Zitat von GermanFreme82

    Warte bitte langsam !

    Also die schwarze Leiste ist eine Zensur meiner Lesezeichen mehr nicht.

    Ich möchte nur wissen wie der code lautet, mit dem man die Tableiste verstecken kann, wenn nur 1 Tab geöffnet ist.

    Den Code gabs das weiß ich, aber ich weiß leider absolut nicht mehr wo der zu finden war hier im Forum.

    DANACH würde ich ganz gerne ein weiteres Script mit eun durchgehen, ABEr bitte erstemal die Tableiste ausblenden, damit die nicht ständig sichtbar ist.

    Was bitte ist die Zensur von Lesezeichen?

    Bitte keinen Extra-Code, den wir hier nicht kennen. Es darf nichts stören, weil sich alles und jedes beeinflussen kann. Lass die Tab-Leiste eingeblendet. Dadurch haben wir eine bessere Kontrolle. Du willst immer den zweiten Schritt vor dem ersten machen. Es sollte immer nur ein Problem gelöst werden, dann das nächste und so weiter. Am Schluss sollten dann alle deine Wünsche erfüllt sein.

    Alles anzeigen

    Aaaaah ;)

    Sorry da hab ich mich wohl falsch ausgedrückt !

    Ich schwärze mit PAINT manuell meine Lesezeichen, da ich finde nicht jeder sollte wissen, was ich so für Favoriten habe.

    Klingt blöd, aber ich möchte das nicht zeigen eben, daher der schwarze Balken bei jedem Bild.

    Das hat nix mit Firefox zutun, das ist "gemalt" ;-).

  • Firefox 69 Anpassungen fehlerhaft trotz about:config Änderung

    • GermanFreme82
    • 10. September 2019 um 17:04
    Zitat von 2002Andreas

    Erst nachdem er das Script entfernt hatte, war die Tableiste da wo er sie haben wollte, nämlich unter der Lesezeichenleiste.

    Zitat von 2002Andreas

    Dann hast du noch einen CSS Code oder ein Script, womit die Tableiste nach ganz unten verschoben wird.

    Ergo war ein Script/CSS Code zusätzlich vorhanden.:/

    Scheint so, da hast du recht, da muß noch was sein in meiner userChrome.CSS was nun endlich arbeitet, weil ich die alten Profile gelöscht habe und in die "userChrome.js" auch nun

    Code
    userChrome.ignoreCache = true;
    userChrome.import("*", "UChrm");

    reingeschrieben hab.

  • Firefox 69 Anpassungen fehlerhaft trotz about:config Änderung

    • GermanFreme82
    • 10. September 2019 um 16:55
    Zitat von milupo

    Was soll das wieder. Du kommst schon wieder mit einem Spezialproblem. Erst einmal muss gewährleistet sein, das CSS-Code und Skripte úberhaupt funktionieren. Einzelne Anpassungen müssen dann zum Schluss gemacht werden.

    Also, funktionieren jetzt deine beiden Skripte? Was ist das fúr eine schwarze Leiste über deiner Tableiste? Blende die Lesezeichen-Symbolleiste ein, damit man sieht,d ass die Tableiste an der richtigen Stelle ist. Du hast meiner Meinung nach noch irgendwelchen CSS-Code aktiv

    Warte bitte langsam !

    Also die schwarze Leiste ist eine Zensur meiner Lesezeichen mehr nicht.

    Die Tableiste sitzt jetzt genau wo sie hingehört für MICH.

    Die Leiste unten am Boden mit den Symbolen ist auch richtig.

    Ich möchte nur wissen wie der code lautet, mit dem man die Tableiste verstecken kann, wenn nur 1 Tab geöffnet ist.

    Den Code gabs das weiß ich, aber ich weiß leider absolut nicht mehr wo der zu finden war hier im Forum.

    DANACH würde ich ganz gerne ein weiteres Script mit eun durchgehen, ABEr bitte erstemal die Tableiste ausblenden, damit die nicht ständig sichtbar ist.

  • Firefox 69 Anpassungen fehlerhaft trotz about:config Änderung

    • GermanFreme82
    • 10. September 2019 um 16:38

    Ich hab nun "TableisteUnten.uc.js" aus dem Ordner "chrome" gelöscht und das kommt dabei raus:

    ABER bevor jetzt alle vor Freude ausrasten, BITTE auch Bild 8888 anschauen !

    Wenn kein Tab offen ist, dann sehe ich meine Tableiste trotzdem.

    Könnt ihr mir bitte nochmal sagen, was ich für einen Code in meine CSS reinschreiben muß, damit die Tableiste bei nur 1 Tab geschlossen bleibt, denn ich finde den leider nicht mehr.

    Bilder

    • 777.jpg
      • 126,73 kB
      • 1.920 × 993
    • 8888.jpg
      • 125,92 kB
      • 1.920 × 993
  • Firefox 69 Anpassungen fehlerhaft trotz about:config Änderung

    • GermanFreme82
    • 10. September 2019 um 16:29

    Ich habe nun noch folgendes gemacht:

    userChrome.js => LEER

    Soll ja falsch sein, also hab ich dort jetzt folgendes reingeschrieben:

    Code
    userChrome.ignoreCache = true;
    userChrome.import("*", "UChrm");

    Ergebnis ist vollkommen merkwürdig ... siehe Foto !

    Bilder

    • 6666.jpg
      • 154,96 kB
      • 1.920 × 993
  • Firefox 69 Anpassungen fehlerhaft trotz about:config Änderung

    • GermanFreme82
    • 10. September 2019 um 16:23

    Im Pfad => C:\Users\VMWare-PC\AppData\Local\Mozilla\Firefox\Profiles\077xyrvk.default-release

    gibts gar keinen Ordner Chrome hääääää ?


    aber hier gibts einen von mir erstellten Ordner Chrome !

    => C:\Users\VMWare-PC\AppData\Roaming\Mozilla\Firefox\Profiles\077xyrvk.default-release\chrome

Unterstütze uns!

Jährlich (2025)

101,9 %

101,9% (662,48 von 650 EUR)

Jetzt spenden
  1. Kontakt
  2. Datenschutz
  3. Impressum
Community-Software: WoltLab Suite™
Mastodon