Links aus Verlauf in neuem Tab öffnen/Tablock-Skript

  • Vielleicht kann man das sogar als Bug oder fehlende Funktionalität in Firefox ansehen:

    Ich lasse mir Lesezeichen in einem neuen Tab öffnen (Browsereinstellung browser.tabs.loadBookmarksInTabs). Das funktioniert dann auch so aus der Seitenleiste. Will ich aber eine Seite aus der Historie aufrufen, ebenfalls aus der Seitenleiste heraus, wird diese mit Linksklick immer im aktuellen Tab geöffnet, was besonders ärgerlich ist, wenn man kurz vorher noch in der Lesezeichenleiste war und sich dort mit Linksklick neue Tabs öffneten. Grundsätzlich ist es aber sehr unschön, jedes Mal erst überlegen zu müssen, welche Maustaste man drücken muss.

    Leider hilft das Tablock-Skript dabei überhaupt nicht, die Seiten werden trotzdem im aktuellen Tab geöffnet. Kann man an diesem Verhalten etwas im Skript ändern?

  • Mit folgendem Skript werden auch Chronik-Einträge aus der Sidebar in neuen Tabs geöffnet. Das Tablock-Skript bleibt unverändert.

    Code
    function() {
      if (location != 'chrome://browser/content/browser.xul')
        return;
      eval('PlacesUIUtils.openNodeWithEvent = ' + PlacesUIUtils.openNodeWithEvent.toString()
        .replace('PlacesUtils.nodeIsBookmark(aNode) && ', ''));
    })();

    Das Skript hat folgende Nebenwirkungen:
    Auch Chronik-Einträge aus der Bibliothek werden in neuen Tabs geöffnet. Bei Einträgen im Chronik-Menü hingegen erfolgt keine Änderung.
    Steht browser.tabs.loadBookmarksInBackground auf true, werden nicht nur alle Lesezeichen, sondern auch die Chronik-Einträge aus der Sidebar und der Bibliothek im Hintergrund geöffnet.

  • Hallo aborix.
    Ich habe das hier mal i aktuellen 61.0.2er getestet, funktioniert nicht.
    Beim öffnen eines Links in der Sidebar aus der Chronik wird hier der aktuelle Tab überschrieben.
    Es wird kein neuer geöffnet.
    browser.tabs.loadBookmarksInBackground ist auf false gesetzt.

    Konsole sagt:
    SyntaxError: function statement requires a name[Weitere Informationen] newtabfromhistory.uc.js:1:8

    Code
    function() {
      if (location != 'chrome://browser/content/browser.xul')
        return;
      eval('PlacesUIUtils.openNodeWithEvent = ' + PlacesUIUtils.openNodeWithEvent.toString()
        .replace('PlacesUtils.nodeIsBookmark(aNode) && ', ''));
    })();

    Ist da das von Speravir erwähnte tablock Script auch notwendig?
    Mfg.
    Endor

    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/124.0.1
    OS: Windows 10 pro 64 bit und Windows 10 Home 64 bit
    Meine Scripte Sammlung: https://github.com/Endor8/userChrome.js
    Kein Support per PN. Fragen bitte im Forum stellen!

  • Das Tablock-Skript braucht man nicht.

    Das Skript verträgt sich wahrscheinlich nicht mit newtabfromhistory.uc.js. Ich kenne das nicht, aber dem Namen nach bewirkt das das Gleiche oder Ähnliches.

  • Ach so! :D

    Beim Kopieren ist am Anfang eine Klammer verlorengegangen.
    Jetzt müsste es passen:

    Code
    (function() {
      if (location != 'chrome://browser/content/browser.xul')
        return;
      eval('PlacesUIUtils.openNodeWithEvent = ' + PlacesUIUtils.openNodeWithEvent.toString()
        .replace('PlacesUtils.nodeIsBookmark(aNode) && ', ''));
    })();
  • Und ob es jetzt funktioniert. :klasse:
    Wenn es Dir recht ist, gebe ich es weiter an Mithrandir.
    Finde ich nämlich sehr praktisch.

    Vielen Dank für das Script.

    Ps. Eine Frage, beseht eventuell auch die Möglichkeit, dass es auch in der Menüleiste bei Chronik
    funktioniert?

    Mfg.
    Endor

    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/124.0.1
    OS: Windows 10 pro 64 bit und Windows 10 Home 64 bit
    Meine Scripte Sammlung: https://github.com/Endor8/userChrome.js
    Kein Support per PN. Fragen bitte im Forum stellen!

  • Code
    (function() {
      if (location != 'chrome://browser/content/browser.xul')
        return;
      eval('PlacesUIUtils.openNodeWithEvent = ' + PlacesUIUtils.openNodeWithEvent.toString()
        .replace('PlacesUtils.nodeIsBookmark(aNode) && ', ''));
    })();

    Danke, Aborix, funktioniert prima!


    Wenn es Dir recht ist, gebe ich es weiter an Mithrandir.
    Finde ich nämlich sehr praktisch.


    Mach das, bitte.

    Disclaimer: Weil so lange keine Antwort kam, hatte ich Aborix per PN gefragt, ob er vielleicht doch eine Möglichkeit kenne. Diese ist ihm nun in den Sinn gekommen und er hat mir das Skript gleichfalls per PN gesendet. Weil es funktioniert, habe ich ihn gebeten, das auch öffentlich zu posten. Mein Hintergedanke war genau der, dass es für andere ebenfalls sinnvoll sein könne.


    Ps. Eine Frage, beseht eventuell auch die Möglichkeit, dass es auch in der Menüleiste bei Chronik
    funktioniert?


    Oh, da ich die Chronik von dort aus nicht nutze, ist mir das gar nicht aufgefallen. Aber Du hast Recht, wenn es denn skripttechnisch möglich ist, sollte die Funktion möglichst ebenso eingebaut werden. (Ich schenk dir übrigens ein t. :wink: )

    Edit: Ich merke aber gerade, dass bei mir von der Chronik im Menü aus die Seiten in einem neuen Tab geöffnet werden.


  • Eine Frage, beseht eventuell auch die Möglichkeit, dass es auch in der Menüleiste bei Chronik
    funktioniert?

    Bitte testet:


    Wenn es Dir recht ist, gebe ich es weiter an Mithrandir.

    Ist mir recht.

  • Das Skript lässt sich kurz so beschreiben, vielleicht auch im Readme:

    Die Einstellungen
      browser.tabs.loadBookmarksInTabs
     und
      browser.tabs.loadBookmarksInBackground
     gelten gleichermaßen für Lesezeichen und Chronik-Einträge, egal von wo sie geöffnet werden.

  • Wenn das Script nichts weiter macht, als die beiden Einstellungen einzutragen bzw. zu ändern, kann man sich das auch sparen und in der user.js entsprechend hinterlegen... :)

  • Das Skript aus #9 funktioniert nicht mit Fx 62. Lesezeichen und Chronik-Einträge lassen sich nicht aufrufen.

    Mit einer kleinen Änderung funktioniert es wieder:

  • aborix Es scheint sich in Fx70 etwas geändert zu haben. Das Skript funktioniert jedenfalls nicht mehr. In Fx69 ging es noch. browser.xul und eval waren bereits dort ersetzt, das Skript sieht jetzt bei mir so aus:

    JavaScript: NewTabFromSidebarMenu.uc.js
    (function() {    if (location != AppConstants.BROWSER_CHROME_URL)        return;    function PUIU_openNodeWithEvent(aNode, aEvent) {        let window = aEvent.target.ownerGlobal;        let browserWindow = (window && window.document.documentElement.getAttribute("windowtype") == "navigator:browser") ? window : BrowserWindowTracker.getTopWindow();        let where = window.whereToOpenLink(aEvent, false, true);        if (this.loadBookmarksInTabs) {            if (where == "current" && !aNode.uri.startsWith("javascript:")) {                where = "tab";            }            if (where == "tab" && browserWindow.gBrowser.selectedTab.isEmpty) {                where = "current";            }        }        this._openNodeIn(aNode, where, window);    }    let onPopupshowing = function() {        let historyMenu = document.getElementById('history-menu');        if (!historyMenu._placesView) {            new HistoryMenu(event);            historyMenu._placesView._onCommand = function HM__onCommand(aEvent) {                let placesNode = aEvent.target._placesNode;                if (placesNode) {                    PlacesUIUtils.openNodeWithEvent(placesNode, aEvent);                };            };        };    };    let historyPopup = document.getElementById('goPopup');    historyPopup.setAttribute('onpopupshowing', '(' + onPopupshowing.toString() + ')()');})();

    Nachtrag: Ach, ärgerlich, dass beim Kopieren die Zeilenumbrüche nicht beachtet werden.

  • So funktioniert es:

    In Zeile 6 fehlte am Anfang   PlacesUIUtils.openNodeWithEvent =  

    Ohne dem funktioniert es auch in Fx 69 nicht. Sonst habe ich nichts verändert.

    Einmal editiert, zuletzt von aborix (29. Oktober 2019 um 22:49)

  • In Zeile 6 fehlte am Anfang PlacesUIUtils.openNodeWithEvent =

    Ohne dem funktioniert es auch in Fx 69 nicht. Sonst habe ich nichts verändert.

    Danke!

    Also habe ich einen Fehler beim Ersetzen von eval gemacht. Allerdings bin ich mir sicher, das Skript in Fx69 genutzt zu haben, dann aber wohl vor der Ersetzung <grybel>.