2013-05-16 19 views
5

Vorrei disattivare annullare e ripristinare in tutti i browser utilizzando JavaScript. Voglio farlo perché la nostra app ha la sua cronologia di annullamento e ripristino incorporata.Disabilita Annulla e Ripristina nei browser

Posso già premere i tasti per disattivare l'annullamento e il ripristino tramite una voce di tastiera, ma desidero disattivare anche le voci di menu. (Menu standard e menu di scelta rapida)

È possibile? Anche se è possibile solo in alcuni browser, sarebbe meglio di niente.

+1

L'unico modo avrei saputo sarebbe quello di rilevare un cambiamento in un campo e verificare se non è stato causato da input da tastiera, taglia/incolla, oppure i propri script, quindi supporre che si trattava di annullamento/ripetere la funzione che lo ha fatto. Per quanto ne so, non esiste un gestore di eventi di lavoro in grado di rilevare gli eventi di annullamento/ripetizione, quindi (se ne hai davvero bisogno) questa potrebbe essere l'unica opzione. –

risposta

2

Una cosa che puoi fare è intercettare l'evento popstate. Sfortunatamente non penso possa essere cancellato, quindi devi modificarlo un po 'aggiungendo uno stato fittizio a cui annullare.

Il seguente codice mi ha impedito di premere di nuovo su Chrome e FF. Sentiti libero di testarlo su altri browser.

window.setTimeout(function(){ 
    window.history.pushState({}, '', '#'); 
    window.addEventListener("popstate", function() { 
    window.history.pushState({}, '', '#'); 
    }); 
},1000); 

Assicurarsi di modificare il codice appropriato per adattarsi alla propria cronologia. Considerare anche l'utilizzo dell'API della cronologia HTML5 anziché della propria implementazione della cronologia.

https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history

+0

Non credo che questa domanda ci chieda di alterare lo stato della cronologia, ma piuttosto di annullare/ripristinare un elemento contentEditable. – IliasT

0

non è possibile utilizzare le API del browser. ma ci sono alcuni modi per rilevare o gestire i metodi. l'hash dell'URL è un modo unico per gestire l'evento di ritorno o di inoltro. tuttavia i browser non supportano questo per la sicurezza dell'utente. puoi cercare gli script di hashing di javascript url ma non dimenticare gli script compatibili con i browser html5.

3

So che questo è vecchio, ma per gli altri che sono curiosi, questo ha lavorato per me.

$(window).bind('keydown', function(evt) { 
    if((evt.ctrlKey || evt.metaKey) && String.fromCharCode(evt.which).toLowerCase() == 'z') { 
    evt.preventDefault(); 
    } 
}); 
+1

In questo modo "disabilita anche le voci di menu (menu standard e menu di scelta rapida)"? cioè blocca l'opzione "Annulla" nel menu di scelta rapida del pulsante destro del mouse? – Zeek

+0

Sì, è anche probabile che tu voglia disabilitare il menu contestuale. Tuttavia, sono ancora curioso di sapere come interrompere la propagazione dell'evento quando l'utente passa all'opzione Modifica -> Annulla del menu dell'applicazione? – IliasT