2013-05-16 5 views
5

Ich möchte Deaktivieren und Wiederherstellen in allen Browsern mit JavaScript deaktivieren. Ich möchte dies tun, wie unsere App eigene eigene Undo und Redo-Geschichte eingebaut hat.Deaktivieren Sie Rückgängig und Wiederherstellen in Browsern

Ich kann bereits Tasten drücken, um Rückgängig und Wiederherstellen über eine Tastatureingabe deaktivieren, aber ich möchte die Menüelemente auch deaktivieren. (Standardmenü und Rechtsklickmenü)

Ist das möglich? Auch wenn es nur in manchen Browsern möglich ist, wäre es besser als gar nichts.

+1

Der einzige Weg, ich würde wissen, würde eine Änderung in einem Feld zu erfassen und prüfen, ob es nicht durch Tastatureingabe, Ausschneiden/Einfügen oder eigene Skripte verursacht wurde, dann davon ausgehen, dass es die Undo war/Redo-Funktion, die dies tat. Soweit mir bekannt ist, gibt es keinen funktionierenden Event-Handler, um Ereignisse rückgängig zu machen oder wiederherzustellen, so dass dies (falls Sie es wirklich brauchen) die einzige Option sein könnte. –

Antwort

2

Eine Sache, die Sie tun können, ist das Abfangen des Popstate-Ereignisses. Leider glaube ich nicht, dass es abgebrochen werden kann, also musst du es ein bisschen hacken, indem du einen Dummy-Status hinzufügst, um es rückgängig zu machen.

Der folgende Code verhinderte, dass ich wieder auf Chrome und FF drückte. Fühlen Sie sich frei, es auf anderen Browsern zu testen.

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

Stellen Sie sicher, dass Sie Ihren Code entsprechend ändern, damit er in Ihre eigene Historie passt. Verwenden Sie auch die HTML5-Verlaufs-API anstelle Ihrer eigenen Verlaufsimplementierung.

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

+0

Ich glaube nicht, dass diese Frage nach dem Ändern des Status der Geschichte fragt, sondern bezieht sich auf Rückgängig/Wiederholen in einem contentEditable Element. – IliasT

0

es nicht möglich ist Browser-APIs. Es gibt jedoch einige Möglichkeiten, Methoden zu erkennen oder zu handhaben. URL-Hashing ist eine Möglichkeit, das Ereignis zurück oder vorwärts zu behandeln. Browser unterstützen dies jedoch nicht für die Benutzersicherheit. Sie können JavaScript url Hash-Skripte suchen, aber nicht vergessen, dass Skripte kompatibel mit HTML5-Browsern.

3

Ich weiß, das ist alt, aber für andere, die neugierig sind, funktionierte das für mich.

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

Macht dies wirklich "auch die Menüpunkte zu deaktivieren. (Standard-Menü und Rechtsklick-Menü)"? d. h. blockiert es die Option "Rückgängig" im Kontextmenü der rechten Maustaste? – Zeek

+0

Ja, wahrscheinlich möchten Sie auch das Kontextmenü deaktivieren. Allerdings bin ich immer noch neugierig, wie Sie die Verbreitung des Ereignisses stoppen würden, wenn der Benutzer zum Bearbeiten -> Rückgängig-Menü des Anwendungsmenüs navigiert? – IliasT

Verwandte Themen