Electron: So verhindern Sie die Navigation in der Webansicht, wenn auf einen URL-Link geklickt wird

Erstellt am 22. Jan. 2016  ·  3Kommentare  ·  Quelle: electron/electron

Hallo,
Ich habe mir den folgenden Satz in der Dokumentation zu will-navigate event (https://github.com/atom/electron/blob/master/docs/api/web-view-tag.md) angesehen.

Der Aufruf von event.preventDefault() hat KEINE Auswirkung.

Wie können wir also verhindern, dass Webview zu einer anderen Seite navigiert? Ich beabsichtige, den Standardbrowser zu starten, wenn der Benutzer auf einen URL-Link in der Webansicht klickt.
Hier ist mein Code zum Renderer-Prozess.

 webview.addEventListener('will-navigate', function(e) {
        e.preventDefault();
        require('electron').shell.openExternal(e.url);
 });

Wenn ich mit diesem Code auf den URL-Link in Webview klicke, navigiert Webview zur neuen Seite und der Standardbrowser wird ebenfalls geöffnet und zeigt die neue Seite an. Ich möchte, dass Webview nicht mehr zur neuen Seite navigiert.

Hilfreichster Kommentar

Dies funktioniert für mich, um die Navigation zu verhindern, indem der Benutzer auf Links klickt und die App über die angeforderte URL benachrichtigt. Vorspannung verwenden und dies injizieren:

document.addEventListener('DOMContentLoaded', function () {
  document.addEventListener('click', function (e) {
    e.preventDefault();
    e.stopPropagation();
    setTimeout(function () {
      var path = e.target.href;
      ipcRenderer.sendToHost('element-clicked', path);
    }, 100);
    return false;
  }, true);
});

bitte beachten Sie den 3. Param beim document.addEventListener('click', fn, true)

Ref: https://stackoverflow.com/questions/6157486/jquery-trap-all-click-events-before-they-happen/6157660#6157660

Alle 3 Kommentare

Duplikat von #1378.

Ich sehe keine Lösung gepostet?

Dies funktioniert für mich, um die Navigation zu verhindern, indem der Benutzer auf Links klickt und die App über die angeforderte URL benachrichtigt. Vorspannung verwenden und dies injizieren:

document.addEventListener('DOMContentLoaded', function () {
  document.addEventListener('click', function (e) {
    e.preventDefault();
    e.stopPropagation();
    setTimeout(function () {
      var path = e.target.href;
      ipcRenderer.sendToHost('element-clicked', path);
    }, 100);
    return false;
  }, true);
});

bitte beachten Sie den 3. Param beim document.addEventListener('click', fn, true)

Ref: https://stackoverflow.com/questions/6157486/jquery-trap-all-click-events-before-they-happen/6157660#6157660

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen