Meerdere browsers, elk met een eigen doel
Ik gebruik meerdere browsers:
- Firefox heb ik heel strikt staan, cookies worden verwijderd na het sluiten, scripts worden standaard geblokkeerd (via NoScript) etcetera. Firefox gebruik ik voor het surfen op het web.
- LibreWolf gebruik ik voor mijn persoonlijke zaken: Protonmail, ProtonCalendar, foto’s (Immich) en bestanden (Nextcloud en Proton). Omdat ik niet iedere keer wil inloggen op Proton, Immich en Nextcloud laat ik in LibreWolf de cookies wel staan.
Link openen in andere browser dan de mail-browser
Als je op een link klikt in een mail, dan wordt die pagina in dezelfde browser geopend als waar je je mail in bekijkt. En dat is niet wat ik wil. Ik wil dat die link geopend wordt in mijn striktere browser Firefox. En dat kan. Hoe? Dat lees je hieronder. Ik werk met Ubuntu, maar dit zal ook in veel andere linux-smaakjes werken.
Waarom gebruik je de ProtonMail-app niet?
Als je de Proton app gebruikt kan je hetzelfde bereiken, want dan opent het de link in je standaard-browser. Die app gebruikt echter enorm veel CPU. Bovendien vind ik het handiger dat ik middels de tab kan schakelen tussen de mail en mijn agenda. Dus de Proton-app gebruik ik niet.
Proton-popup met de url van de link
Proton toont eerst een popup met de url van de link. Dat is al een stuk veiliger dan de meeste email-programma’s doen, want zo kan je zelf eerst beoordelen of je die pagina echt wilt openen. Als je op de ‘Bevestigen’ knop drukt opent Proton dit in dezelfde browser.

Wat ik graag wil is dat er een knop bij komt zodat ik de link in Firefox kan openen. En dat kan, met behulp van Violentmonkey. Violentmonkey is een browser-extensie die javascript kan uitvoeren waarmee je de webpagina kan aanpassen. De stappen:
- Maak een klein shell-script dat Firefox opent
- Registreer een custom protocol (bv.
firefox://) op je systeem - Violentmonkey script zet de URL om naar
firefox://https://...en opent die link
Stap 1 – Maak een script aan in ~/.local/bin
cat > ~/.local/bin/open-in-firefox.sh << 'EOF'
#!/bin/bash
URL=$(python3 -c "import sys, urllib.parse; print(urllib.parse.unquote(sys.argv[1]))" "${1#firefox://}")
firefox "$URL" &
EOF
chmod +x ~/.local/bin/open-in-firefox.sh
Stap 2 – Registreer de protocol handler
Maak het script voor de protocol handler aan door onderstaande uit te voerern op de command line (vervang YOUR_USERNAME met je eigen user):
cat > ~/.local/share/applications/firefox-protocol.desktop << 'EOF'
[Desktop Entry]
Name=Open in Firefox
Exec=/home/YOUR_USERNAME/.local/bin/open-in-firefox.sh %u
Type=Application
NoDisplay=true
MimeType=x-scheme-handler/firefox;
EOF
Registreer de protocol handler door het volgende uit te voeren op de command line:
xdg-mime default firefox-protocol.desktop x-scheme-handler/firefox
update-desktop-database ~/.local/share/applications/
Stap 3 – Voeg script toe aan ViolentMonkey
Als je Violent Monkey nog niet als extensie hebt, voeg die dan eerst toe.
Voeg vervolgens het volgende script toe aan Violent Monkey:
// ==UserScript==
// @name Proton - Open in Firefox
// @match https://mail.proton.me/*
// @grant none
// ==/UserScript==
(function () {
const observer = new MutationObserver(() => {
const confirmBtn = document.querySelector('button[aria-label^="Bevestig het openen van link"]');
if (!confirmBtn || confirmBtn.dataset.ffInjected) return;
confirmBtn.dataset.ffInjected = "true";
const url = confirmBtn.getAttribute("aria-label").replace("Bevestig het openen van link ", "");
const ffBtn = document.createElement("button");
ffBtn.className = confirmBtn.className;
ffBtn.textContent = "Open in Firefox";
ffBtn.style.backgroundColor = "#e66000";
ffBtn.addEventListener("click", () => {
document.querySelector('[data-testid="modal:close"]')?.click();
const a = document.createElement("a");
a.href = "firefox://" + encodeURIComponent(url);
a.click();
});
confirmBtn.insertAdjacentElement("afterend", ffBtn);
});
observer.observe(document.body, { childList: true, subtree: true });
})();
EncodeURIComponent
De URL bevat speciale tekens (:, /, ?, =, &). Zonder encoding zou de browser die verkeerd interpreteren als onderdeel van de firefox://-protocol-URL in plaats van als inhoud ervan. encodeURIComponent zet die tekens om naar %3A, %2F etc., zodat de volledige URL intact als één argument wordt doorgegeven. Het shell script decodeert ze daarna weer met urllib.parse.unquote.
Let op de taalinstelling
De aria-label in het script is Nederlands (“Bevestig het openen van link”). Als je een andere taalinstelling hebt werkt het script niet.
Test
Als je nu je ProtonMail pagina ververst (CTRL-SHIFT+R) dan is er een knop toegevoegd aan de popup:

En als het goed is opent Firefox met de gewenste pagina als je op de oranje knop drukt.