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.
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)
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:
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