Open een ProtonMail-link in een andere browser

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:

  1. Maak een klein shell-script dat Firefox opent
  2. Registreer een custom protocol (bv. firefox://) op je systeem
  3. 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.

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *