web-dev-qa-db-fra.com

Ouvrir un lien depuis Electron dans le navigateur

Existe-t-il un moyen (simple/intégré) d'ouvrir un nouveau navigateur (je veux dire le navigateur par défaut du système d'exploitation) pour un lien d'Electron au lieu de visiter ce lien dans votre application Electron?

32
saadel

Vous pouvez simplement utiliser:

require("Shell").openExternal("http://www.google.com")
43
zianwar

Il existe un moyen bien meilleur et plus simple que ce que @Marcelo a proposé, mais plus facile à implémenter pour tous les liens à la fois à ce que @zianwar a proposé.

const Shell = require('electron').Shell;

// assuming $ is jQuery
$(document).on('click', 'a[href^="http"]', function(event) {
    event.preventDefault();
    Shell.openExternal(this.href);
});

REMARQUE: nécessite jQuery.

23
niieani

Pour que tous les liens Electron s'ouvrent en externe dans le navigateur du système d'exploitation par défaut, vous devrez leur ajouter une propriété onclick et modifier la propriété href afin qu'elle ne charge rien dans l'application Electron.

Vous pouvez utiliser quelque chose comme ceci:

aTags = document.getElementsByTagName("a");
for (var i = 0; i < aTags.length; i++) {
  aTags[i].setAttribute("onclick","require('Shell').openExternal('" + aTags[i].href + "')");
  aTags[i].href = "#";
}

Mais assurez-vous que le document entier a été chargé avant de faire ceci sinon cela ne fonctionnera pas. Une implémentation plus robuste ressemblerait à ceci:

if (document.readyState != "complete") {
  document.addEventListener('DOMContentLoaded', function() {
    prepareTags()
  }, false);
} else {
  prepareTags();
}

function prepareTags(){
  aTags = document.getElementsByTagName("a");
  for (var i = 0; i < aTags.length; i++) {
    aTags[i].setAttribute("onclick","require('Shell').openExternal('" + aTags[i].href + "')");
    aTags[i].href = "#";
  }
  return false;
}

N'oubliez pas que si vous chargez des fichiers externes, vous devrez également les faire passer par ce processus après ils sont entièrement chargés.

2
Marcelo Lazaroni