2013-05-16 18 views
5

JavaScript'i kullanarak tüm tarayıcılarda geri almayı ve yeniden çizmeyi devre dışı bırakmak istiyorum. Uygulamamızın kendi geri alma ve geri alma geçmişinin olduğu gibi bunu yapmak istiyorum.Tarayıcılarda Geri Al ve Yinele Devre Dışı Bırakma

Klavye tuşlarıyla geri alma işlemini iptal etmek ve yeniden yapmak için tuşlara basabiliyorum ancak menü öğelerini de devre dışı bırakmak istiyorum. (Standart menü ve sağ tıklama menüsü)

Bu mümkün mü? Sadece bazı tarayıcılarda mümkün olsa bile, hiç yoktan iyidir.

+1

Ben geri alma olduğunu bir alanda değişikliğe algılamak ve klavye girişi, kes/yapıştır veya kendi komut yüzünden olmadı olmadığını kontrol ardından varsaymak olacağını bilemez tek yolu/Bunu yapan yinele işlevi. Bildiğim kadarıyla, geri alma/yineleme olaylarını yakalamak için çalışan bir olay işleyicisi yoktur, yani (gerçekten ihtiyacınız varsa) bu tek seçenek olabilir. –

cevap

2

Yapabileceğiniz tek şey, popstate olayını kesmektir. Maalesef iptal edilebileceğini sanmıyorum, bu yüzden geri almak için bir kukla devlet ekleyerek biraz hacklemeniz gerekiyor.

Aşağıdaki kod, Chrome ve FF'de tekrar basmamı engelledi. Diğer tarayıcılarda test etmekten çekinmeyin.

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

Kodunuzu kendi geçmişinize uyacak şekilde uygun şekilde değiştirdiğinizden emin olun. Ayrıca, kendi geçmiş uygulamanız yerine HTML5 Geçmiş API'sini kullanmayı düşünün.

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

+0

Bu sorunun tarihin durumunu değiştirmeyi istemediğine inanıyorum, aksine contentEditable öğesinde geri almayı/yeniden yapmayla ilgilidir. – IliasT

0

tarayıcının apis kullanılarak mümkün değildir. ancak yöntemleri saptamanın veya ele almanın birkaç yolu vardır. url hashing, geri veya ileri olayları ele almanın tek yoludur. ancak tarayıcılar, kullanıcı güvenliği için bunu desteklemez. javascript url karma komut dosyalarını arayabilir ama html5 tarayıcıları ile uyumlu bu scriptleri unutmazsınız.

3

Bunun eski olduğunu biliyorum, ama meraklı olan diğerleri için, bu benim için çalıştı.

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

Bu gerçekten "menü öğelerini de devre dışı bırakıyor mu (Standart menü ve sağ tıklama menüsü)"? fare sağ tıklama tıklama bağlam menüsünde "Geri Al" seçeneğini engelliyor mu? – Zeek

+0

Evet, büyük olasılıkla içerik menüsünü de devre dışı bırakmak isteyebilirsiniz. Bununla birlikte, kullanıcı uygulama menüsünün Düzenle -> Geri Al seçeneğine gittiğinde, olayın yayılmasını nasıl durduracağınızı merak ediyorum. – IliasT

İlgili konular