Domanda

Nel layout della nostra pagina è presente una web part ospitata dal provider.Quando un utente visita qualsiasi pagina non può utilizzare il pulsante Indietro, quando ci prova viene reindirizzato alla pagina corrente.

La web part è ospitata in un iFrame con un src di appredirect.aspx che appare nella cronologia, quindi quando un utente risponde, in realtà andrà ad appredirect.aspx e non alla pagina precedente.

Qualcuno conosce un modo alternativo?Stiamo ospitando su SharePoint Online, quindi non possiamo modificare nessuno dei file sottostanti.

È stato utile?

Soluzione

Carica il javascript nella prima pagina nell'app ospitata dal provider.

Un evento popstate viene inviato alla finestra ogni volta che la voce della cronologia attiva cambia tra due voci della cronologia per lo stesso documento.

-> Aggiungi record della cronologia per la stessa pagina (URL iniziale ospitato dal provider)

-> Quando si preme il pulsante Indietro, viene attivato l'evento popstate e carica la pagina della cronologia corretta

Utilizzo pushState per aggiungere un elemento della cronologia senza ricaricare la pagina con lo stesso URL del documento.

Naturalmente, i record della cronologia sono identici in Firefox e Chrome...tranne IE.Il che fa alcune cose che non capisco affatto.Funziona però se torni indietro di un altro passo.-> Ho aggiunto un controllo del browser e sono tornato indietro di un'altra pagina nella cronologia per Internet Explorer.

È un po' brutto ma funziona abbastanza bene.Funziona anche se sfogli le pagine all'interno dell'iframe e poi torni indietro.

Mi aspetto che potrebbe dare un comportamento strano se si fa clic su alcuni collegamenti nell'iframe e si finisce sulla prima pagina.Anche premendo il pulsante Indietro/Avanti in quella situazione si attiverà l'evento.

window.onpopstate = function (event) {
    if (navigator.sayswho.indexOf("IE") != -1) {
        history.go(-3);
    }
    else {
        history.go(-2);
    }
};

if (document.referrer.indexOf("_layouts/15/appredirect.aspx?") != -1) {
    // Add history so when you click on the back button, the onpopstate event is 
    // triggered since the previous page is on the same document.
    history.pushState({}, "reload", document.location.href);
}

// Just to test if internet explorer is used, change with your own if you want :-)
navigator.sayswho = (function () {
var ua = navigator.userAgent, tem,
M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
if (/trident/i.test(M[1])) {
    tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
    return 'IE ' + (tem[1] || '');
}
if (M[1] === 'Chrome') {
    tem = ua.match(/\bOPR\/(\d+)/)
    if (tem != null) return 'Opera ' + tem[1];
}
M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
if ((tem = ua.match(/version\/(\d+)/i)) != null) M.splice(1, 1, tem[1]);
return M.join(' ');
})();

L'ho testato e sembra funzionare decentemente.

Funziona con IE11, Firefox 31.0 e Chrome 36.

Richiede l'API di cronologia HTML5, fare clic Qui per i browser supportati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top