Hallo zusammen.
Habe mit diesem Script ein kleines Problem.
Linksklick funktioniert bestens. Definierte Adressen werden in neuen Tabs geöffnet.
Rechtsklick wird neues Fenster geöffnet, wie es soll, aber keine
neuen Tabs mit definierten Seiten geöffnet. Könnt ihr euch das mal anschauen.
Getestet in Nightly, funktioniert auch wieder.
JavaScript
(function() {
"use strict";
if (!window.gBrowser) {
return;
}
const quickLinks = [
{wLink: "https://www.camp-firefox.de/forum", key: 0},
{wLink: "https://www.thunderbird-mail.de/forum/board/71-manuelle-anpassungen-per-css-oder-script/", key: 0},
{wLink: "https://github.com/Endor8/userChrome.js", key: 0},
{wLink: "https://github.com/alice0775/userChrome.js", key: 0},
{wLink: "https://www.camp-firefox.de/forum", key: 2},
{wLink: "https://www.thunderbird-mail.de/forum/board/71-manuelle-anpassungen-per-css-oder-script/", key: 2},
{wLink: "https://github.com/Endor8/userChrome.js", key: 2},
{wLink: "https://github.com/alice0775/userChrome.js", key: 2}
];
/*
* ============================================================
* Vorhandenes Widget entfernen
* ============================================================
*/
try {
if (CustomizableUI.getWidget("link-button")) {
CustomizableUI.destroyWidget("link-button");
}
} catch (e) {
console.error("Quicklink: destroyWidget:", e);
}
/*
* ============================================================
* Links im aktuellen Fenster öffnen
*
* loadTabs() öffnet alle URLs in einem einzigen Aufruf.
* ============================================================
*/
function openCurrentWindow() {
const urls = quickLinks
.filter(function(item) {
return item.key === 0;
})
.map(function(item) {
return item.wLink;
});
if (!urls.length || !window.gBrowser) {
return;
}
try {
window.gBrowser.loadTabs(
urls,
{
inBackground: false,
replace: false,
triggeringPrincipal:
Services.scriptSecurityManager
.getSystemPrincipal()
}
);
} catch (e) {
console.error(
"Quicklink: loadTabs:",
e
);
}
}
/*
* ============================================================
* Neues Fenster
*
* Wir verwenden OpenBrowserWindow() wie im ursprünglichen
* Script und warten auf die vollständige Initialisierung.
* ============================================================
*/
function openNewWindow() {
let newWin;
try {
newWin = OpenBrowserWindow();
} catch (e) {
console.error(
"Quicklink: OpenBrowserWindow:",
e
);
return;
}
const urls = quickLinks
.filter(function(item) {
return item.key === 2;
})
.map(function(item) {
return item.wLink;
});
if (!urls.length) {
return;
}
/*
* Firefox-Signal für ein vollständig gestartetes
* Browserfenster.
*/
const observer = {
observe(subject, topic) {
if (
topic !==
"browser-delayed-startup-finished" ||
subject !== newWin
) {
return;
}
Services.obs.removeObserver(
observer,
"browser-delayed-startup-finished"
);
loadIntoNewWindow();
}
};
function loadIntoNewWindow() {
if (
!newWin ||
newWin.closed ||
!newWin.gBrowser
) {
return;
}
try {
/*
* Der erste URL ersetzt den vorhandenen Tab,
* die restlichen werden als neue Tabs angehängt.
*/
newWin.gBrowser.loadTabs(
urls,
{
inBackground: false,
replace: true,
triggeringPrincipal:
Services.scriptSecurityManager
.getSystemPrincipal()
}
);
} catch (e) {
console.error(
"Quicklink: loadTabs neues Fenster:",
e
);
}
}
Services.obs.addObserver(
observer,
"browser-delayed-startup-finished"
);
/*
* Falls das Fenster bereits vollständig gestartet war,
* bevor der Observer registriert wurde.
*/
setTimeout(function() {
try {
if (
newWin &&
!newWin.closed &&
newWin.gBrowser
) {
Services.obs.removeObserver(
observer,
"browser-delayed-startup-finished"
);
loadIntoNewWindow();
}
} catch (e) {
console.error(
"Quicklink: Fensterprüfung:",
e
);
}
}, 500);
}
/*
* ============================================================
* WIDGET
* ============================================================
*/
try {
CustomizableUI.createWidget({
id: "link-button",
type: "custom",
defaultArea: CustomizableUI.AREA_NAVBAR,
onBuild: function(aDocument) {
const profileDirectory =
Services.dirsvc
.get("ProfD", Ci.nsIFile)
.path
.replace(/\\/g, "/");
const toolbaritem =
aDocument.createXULElement(
"toolbarbutton"
);
toolbaritem.id = "link-button";
toolbaritem.className =
"toolbarbutton-1 " +
"chromeclass-toolbar-additional";
toolbaritem.setAttribute(
"removable",
"true"
);
toolbaritem.setAttribute(
"label",
"Quicklink"
);
toolbaritem.setAttribute(
"tooltiptext",
"Quicklinks:\n" +
"Linksklick: aktuelles Fenster\n" +
"Rechtsklick: neues Fenster"
);
toolbaritem.setAttribute(
"style",
'list-style-image: url("file:' +
profileDirectory +
'/chrome/icons/Links.png");'
);
/*
* =================================================
* DER ENTSCHEIDENDE TEIL
*
* Wir hängen den Listener direkt an den
* tatsächlich erzeugten toolbarbutton.
*
* Nicht onCommand.
* Nicht CustomizableUI.onClick.
* =================================================
*/
toolbaritem.addEventListener(
"click",
function(event) {
console.log(
"Quicklink click:",
event.button
);
/*
* Linksklick
*/
if (event.button === 0) {
event.preventDefault();
event.stopPropagation();
openCurrentWindow();
return;
}
/*
* Rechtsklick
*/
if (event.button === 2) {
event.preventDefault();
event.stopPropagation();
openNewWindow();
return;
}
},
true
);
return toolbaritem;
}
});
console.log(
"Quicklink: Widget erstellt"
);
} catch (e) {
console.error(
"Quicklink: createWidget:",
e
);
}
})();
Alles anzeigen



