imbattuti in questo stesso recentemente, e voglio aggiungere che anche se user2269867's risposta è una soluzione praticabile, potrebbe non funzionare in determinate situazioni.
Ad esempio, il browser di sistema non si apre solo se l'utente fa clic su un collegamento con l'attributo target = "_ blank", ma anche se la funzione window.open() viene chiamata in javascript. Inoltre, anche la rimozione di tutti gli attributi 'target' non funzionerà se una pagina caricherà alcuni contenuti in modo dinamico e modificando DOM dopo che lo script è già stato completato.
Per risolvere tutti i problemi precedenti, è necessario eseguire l'override della funzione window.open e anche controllare l'attributo 'target' non una volta, ma ogni volta che l'utente fa clic su qualcosa. Ecco lo script che copre questi casi:
function selfOrParentHasAttribute(e, attributeName) {
var el = e.srcElement || e.target;
if (el.hasAttribute(attributeName)) {
return el;
}
else {
while (el = el.parentNode) {
if (el.hasAttribute(attributeName)) {
return el;
}
}
}
return false;
}
var targetAttributeName = "target";
document.addEventListener("click", function (e) {
var el = selfOrParentHasAttribute(e, targetAttributeName);
if (el) {
if ((el.getAttribute(targetAttributeName) == "_blank") ||
(el.getAttribute(targetAttributeName) == "_new"))
{
el.removeAttribute(targetAttributeName);
}
}
});
window.open = function() {
return function (url) {
window.location.href = url;
};
}(window.open);
Le mie competenze js non sono l'ideale, quindi sentitevi liberi di modificare. Inoltre, non dimenticare che, come kiewic mentioned, per Windows 10 c'è l'evento WebView.NewWindowRequested che risolve questo problema in modo più naturale.
fonte
2016-09-06 15:48:24
Funziona come un incantesimo! Grazie! –
Ehi! Grande amico! grazie ha funzionato appena aggiunto, attendo il lavoro chiave prima di webView e rendendo l'evento asincrono, ha funzionato perfettamente. –