alert()
JavaScript'teki işlevi geçersiz kılma konusunda herhangi bir deneyimi olan var mı?
- Hangi tarayıcılar bunu destekliyor?
- Hangi tarayıcı sürümleri bunu destekliyor?
- İşlevi geçersiz kılmanın tehlikeleri nelerdir?
_alert
alert()
JavaScript'teki işlevi geçersiz kılma konusunda herhangi bir deneyimi olan var mı?
_alert
Yanıtlar:
Kesinlikle "desteklenir". Bu sizin web sayfanızdır, onunla ne yapmak isterseniz yapın.
Bunu, bir kütüphaneyi değiştirmeden ancak etkinliklere gizleyerek analiz etkinliklerini izlemek için zaten yaptım.
Proxy desenini kullanın:
(function(proxied) {
window.alert = function() {
// do something here
return proxied.apply(this, arguments);
};
})(window.alert);
İsterseniz aramayı orijinal işleve atlayabilirsiniz (proxy)
Daha fazla bilgi burada: JQuery Türleri # Proxy Desen
apply()
kullanılamıyor window.alert
.
apply
bir yöntemi Function
. Bu yüzden açıkçaalert
mı?
Tarayıcıların çoğu geçersiz kılmayı desteklese de, onunla ne yaptığınıza dikkat edin.
Varsayılan uyarı kutusu yürütme iş parçacığını engellediğinden, bu davranışa dayanan bazı kitaplıklar artık çalışmayabilir (en iyi ihtimalle).
İyi bir vatandaş olmanız ve yerel API'ya dokunmaktan kaçınmanız gerekir. Bunu yaparsanız, 3. taraf kodunu kullanırken işleri bozabilirsiniz.
Ancak, uyarı davranışını belirli bir bağlamda yeniden tanımlamak istiyorsanız, bunu anonim bir işlevle kapatabilirsiniz:
/* new funky alert */
function myFunkyAlert(msg) {
/* here goes your funky alert implementation */
alert("Look ma!\n" + msg);
}
(function(alert) { // anonymous function redefining the "alert"
/* sample code */
alert("Hello World!");
})(myFunkyAlert);
Overring alert fonksiyonunda tehlike yoktur. Her tarayıcı bunu destekler.
Örneğin:
// function over riding. Redirecting to Console with Firebug installed.
function alert(message) {
console.info(message);
}
alert('This is an override.');
alert("Reloading")
, web sayfasını çağıran ve sonra yeniden yükleyen kod . Uyarı metni asla kullanıcı tarafından görülmeyebilir.
Her Javascript uygulamasının bunu destekleyeceğini düşünüyorum ve bununla ilgili bir tehlike yok. Genellikle işletim sistemi tarzındaki düz uyarı kutularını HTML / CSS ile daha zarif bir şeye değiştirmek için yapılır. Bu şekilde yapmak, mevcut kodu değiştirmek zorunda olmadığınız anlamına gelir! Mümkün olduğu için Javascript harika.
Diğer cevapların çoğunda söylendiği gibi, fonksiyonu sadece
window.alert = null
veya
window.alert = function(){}
ancak, bu mutlaka Window
yapıcı prototipindeki işlevi geçersiz kılmaz (büyük harf not edin W
), böylece bilgisayar korsanı hala şunu yazabilir:
Window.prototype.alert.apply(window, ["You were hacked!"]);
bu nedenle, bu işlevi şu şekilde geçersiz kılmanız gerekir:
Window.prototype.alert = null
veya
Window.prototype.alert = function(){}
Ladislav.
IE8 için alert () yöntemini bu şekilde yeniden tanımlayabilirsiniz
/**
* Definition of global attached to window properties <br/>
*/
(function() {
nalert = window.alert;
Type = {
native: 'native',
custom: 'custom'
};
})();
/**
* Factory method for calling alert().
* It will be call a native alert() or a custom redefined alert() by a Type param.
* This defeinition need for IE
*/
(function(proxy) {
proxy.alert = function () {
var message = (!arguments[0]) ? 'null': arguments[0];
var type = (!arguments[1]) ? '': arguments[1];
if(type && type == 'native') {
nalert(message);
}
else {
document.write('<h1>I am redefiend alert()<br/>Alert say: '+message+'</h1>');
}
};
})(this);
ve olarak ara
alert('Hello, hacker!');
nalert('I am native alert');
alert('Hello, user!', Type.custom);
Uyarı () işlevini geçersiz kılma deneyimim, bir keresinde "Lütfen kayıt olun!" Görüntülenen JavaScript kitaplığının deneme sürümünü "kesmek" için kullandığımızdır. nag ekranını zaman zaman uyarı ile.
Biz sadece kendi alert () fonksiyonumuzu ve voila'mızı tanımladık.
Sadece test amaçlıydı, daha sonra tam sürümünü aldık, bu yüzden burada ahlaksız hiçbir şey yok ;-)
Modern tarayıcılardaki tüm JavaScript uygulamaları geçersiz kılmayı destekler.
Tehlikeler oldukça basittir, alert () gibi yaygın olarak bilinen işlevleri geçersiz kılarak diğer ekip üyelerini kesinlikle çıldırtırsınız.
Bu nedenle, mevcut kodu bir şekilde hata ayıklamak veya kesmek için bir araç olarak işlevleri geçersiz kılmadığınız sürece, bunu yapmak için herhangi bir neden görmüyorum. Sadece yeni bir işlev oluşturun.
Firefox ve ie8'de çalıştığından emin. Çalışmayacağı herhangi bir tarayıcı olacağını göremiyorum. Bu, çoğu zaman böyle yerel işlevlerle kullanıldığını görmese bile, javascript'in nasıl çalıştığının hemen hemen temelidir.
Uyarıların nereden geldiğini bulmak için yaptığım hızlı bir kesmek, konsola gidip buna girmek.
function alert(message) {
console.info(message);
debugger;
}
Js tarayıcı işlevleri söz konusu olduğunda window.alert
, en iyi bilinen ve en iyi bilinen, js bilmeyen insanlar alert()
- bugün kullanılan tüm tarayıcılarda desteklendiğinden ve kod snippet'inizin de olduğundan emin olabilirsiniz. Ancak, alert()
sizin gibi belirli bir kullanım durumu için geçersiz kılmayacağım (bu daha çok OOP anlamında geçersiz kılmak yerine yeniden düzenleme gibi) çünkü alert()
şablon olmadan kullanmanız gerektiğinde ve muhtemelen, başka bir uyarı olmayan işlev.
Gerçek uyarı mesajlarıyla birlikte varsayılan bir mesaj gösterme gereksinimi ile karşılaştım. Ben böyle yapmayı başardım.
const actualAlertFunc = window.alert;
window.alert = function(msg) {
actualAlertFunc('some default message '+ msg);
}
Krom üzerinde test ettim. İyi bir uygulama olup olmadığından emin değilim, ama amaca hizmet ediyor.