- Firefox-Version
- 127.0.2
- Betriebssystem
- Win 10
Hi
Ich nutze folgendes Skript um beim öffnen von mehreren Links auf einmal auch den leeren Tab mitzunutzen:
(function() {
if (window.__SSi != 'window0')
return;
PlacesUIUtils.openTabset = function openTabset(aItemsToOpen, aEvent, aWindow) {
if (!aItemsToOpen.length)
return;
let browserWindow = aWindow &&
aWindow.document.documentElement.getAttribute("windowtype") == "navigator:browser" ?
aWindow : BrowserWindowTracker.getTopWindow();
var urls = [];
let skipMarking = browserWindow && PrivateBrowsingUtils.isWindowPrivate(browserWindow);
for (let item of aItemsToOpen) {
urls.push(item.uri);
if (skipMarking)
continue;
if (item.isBookmark)
this.markPageAsFollowedBookmark(item.uri);
else
this.markPageAsTyped(item.uri);
}
var where = browserWindow ?
browserWindow.whereToOpenLink(aEvent, false, true) : "window";
if (where == "window") {
let args = Cc["@mozilla.org/array;1"].createInstance(Ci.nsIMutableArray);
let stringsToLoad = Cc["@mozilla.org/array;1"].createInstance(Ci.nsIMutableArray);
urls.forEach(url => stringsToLoad.appendElement(PlacesUtils.toISupportsString(url)));
args.appendElement(stringsToLoad);
browserWindow = Services.ww.openWindow(
aWindow,
AppConstants.BROWSER_CHROME_URL,
null,
"chrome,dialog=no,all",
args
);
return;
}
var loadInBackground = (where == "tabshifted");
browserWindow.gBrowser.loadTabs(urls, {
inBackground: loadInBackground,
replace: browserWindow.gBrowser.selectedTab.isEmpty,
triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(),
});
};
})();
Alles anzeigen
Gleichzeitig sind diese beiden Skripte im Einsatz um mir auf die Schnelle einen Überblick über Anzahl von Links u. Ordnern zu verschaffen:
(function() {
if (!window.gBrowser)
return;
setTimeout(function() {
setFunction();
},50);
function setFunction() {
const css =`
.countClass::after {
content: attr(data-value);
color: white;
}
`;
const sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
const uri = Services.io.newURI('data:text/css,' + encodeURIComponent(css));
sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
let bmbMenu = document.getElementById('bookmarks-menu-button');
let bookMenu = document.getElementById('bookmarksMenu');
let persToolBar = document.getElementById('PersonalToolbar');
if(bmbMenu)
bmbMenu.addEventListener('popupshowing', onPopupShowing );
if(bookMenu)
bookMenu.addEventListener('popupshowing', onPopupShowing );
if(persToolBar)
persToolBar.addEventListener('popupshowing', onPopupShowing );
}
function onPopupShowing(aEvent) {
let popup = aEvent.originalTarget;
for (let item of popup.children) {
if (item.localName != 'menu' || item.id?.startsWith('history'))
continue;
setTimeout(() => {
let itemPopup = item.menupopup;
itemPopup.openPopup();
itemPopup.hidePopup();
let menuitemCount = 0;
let menuCount = 0;
for (let subitem of itemPopup.children) {
if (subitem.classList.contains('bookmark-item') && !subitem.disabled && !subitem.hidden) {
if (subitem.localName == 'menuitem') {
menuitemCount++;
} else if (subitem.localName == 'menu') {
menuCount++;
}
}
}
let label = item.childNodes[3]; //label.menu-iconic-text
label.classList.add('countClass');
let strCountOut = " " + menuCount + "/" + menuitemCount + ""
label.setAttribute('data-value', strCountOut);
}, 100);
}
}
})();
Alles anzeigen
sowie:
(function() {
if (!window.gBrowser)
return;
function setFunction() {
PlacesViewBase.prototype._mayAddCommandsItems =
function PVB__mayAddCommandsItems(aPopup) {
let hasMultipleURIs = false;
let menuitemCount = 0;
let menuCount = 0;
if (aPopup._placesNode.childCount > 0) {
for (let item of aPopup.children) {
if (item._placesNode) {
if (item.localName == 'menuitem') {
menuitemCount++;
} else if (item.localName == 'menu') {
menuCount++;
}
}
}
if (menuitemCount > 0 || menuCount > 0) {
hasMultipleURIs = true;
}
}
if (!hasMultipleURIs) {
aPopup.setAttribute("nofooterpopup", "true");
if (aPopup._endOptOpenAllInTabs) {
aPopup.removeChild(aPopup._endOptOpenAllInTabs);
aPopup._endOptOpenAllInTabs = null;
aPopup.removeChild(aPopup._endOptSeparator);
aPopup._endOptSeparator = null;
}
return;
}
aPopup.removeAttribute("nofooterpopup");
if (!aPopup._endOptOpenAllInTabs) {
aPopup._endOptSeparator = document.createXULElement("menuseparator");
aPopup._endOptSeparator.className = "bookmarks-actions-menuseparator";
aPopup.insertBefore(aPopup._endOptSeparator, aPopup.firstChild);
aPopup._endOptOpenAllInTabs = document.createXULElement("menuitem");
aPopup._endOptOpenAllInTabs.className = "openintabs-menuitem";
if (this.options?.extraClasses?.entry) {
aPopup._endOptOpenAllInTabs.classList.add(
this.options.extraClasses.entry
);
}
aPopup._endOptOpenAllInTabs.setAttribute(
"oncommand",
"PlacesUIUtils.openMultipleLinksInTabs(this.parentNode._placesNode, event, " +
"PlacesUIUtils.getViewForNode(this));"
);
aPopup._endOptOpenAllInTabs.setAttribute(
"onclick",
"checkForMiddleClick(this, event); event.stopPropagation();"
);
aPopup.insertBefore(aPopup._endOptOpenAllInTabs, aPopup.firstChild);
}
let label = menuCount + " Ordner";
label += " / " + menuitemCount + " Link"
if (menuitemCount != 1) {
label += "s";
}
if (menuitemCount == 1) {
label += " -> Link in Tab öffnen"
} else if (menuitemCount > 1) {
label += " -> Links in Tabs öffnen"
}
aPopup._endOptOpenAllInTabs.setAttribute("label", label);
}
}
setTimeout(function() {
setFunction();
},50);
})();
Alles anzeigen
Sieht dann so aus:
Seit neuestem (ich kann's gerade nicht näher einordnen, weil ich ein paar Tage coronös im Bett lag und nun wieder am Rechner ein paar Updates installiert und gearbeitet habe) funktioniert der "Links in Tabs öffnen" (s. Pfeil) nicht mehr, sodass die vier Links nicht mehr in neuen Tabs geöffnet werden, wenn das oberste Skript, welches die Mitnutzung des leeren Tabs steuert aktiv ist.
D.h. im ersten Skript muss etwas faul sein, soweit konnte ich das Problem schon einkreisen. Alle anderen Skripte funktionieren soweit normal.
Jemand eine Idee was kaputt ist bzw. geändert werden muss, damit alle drei (und der Rest der Skripte) wieder friedlich mit- und nebeneinander funktionieren?