Показать сообщение отдельно
  #14 (permalink)  
Старый 28.10.2012, 21:38
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от DjDiablo
Чо ты завёлся, никто и не сомневается что могёш )))
кто завелся? чет такого не помню. А вообще я к тому что делать проверку через toString бессмысленно.

Сообщение от DjDiablo
И более того с чего ты взял что все зловреды заменяют toString ?
не понял к чему это?

а насчет toString вот небольшой метод, который легко заменит метод и фиг ты узнаешь по toString что это нативный или нет.

Вот вам защита
function replace_method( context, method, fn ) {

    var old = context[ method ];

    if ( old.toString === Function.prototype.toString ) {
        fn.toString = function() { return old.toString() }
        fn.toString.toString = function() { return old.toString.toString() }
        fn.toString.toString.toString = fn.toString.toString;
    } else {
        fn.toString = old.toString;
    }

    return context[ method ] = fn;
}


// ================ проверка =====================

var x=function(){alert(100)};
x.toString = function() {
    return 'This is my lib method';
}

// ------- меняем метод -------
x = replace_method( window, 'x', function(){
    alert( 100500 );
});
// -------

alert( x.toString );
alert( x.toString.toString );
alert( x.toString.toString.toString );
alert( x.toString.toString.toString.toString );
alert( x.toString.toString.toString.toString.toString );
alert( x.toString.toString.toString.toString.toString.toString );
alert( x );
x();



// -------- второй вариант без пользовательского toString -----------

var y=function(){alert(200)};

// ------- меняем метод -------
y = replace_method( window, 'y', function(){
    alert( 200500 );
});
// -------

alert( y.toString );
alert( y.toString.toString );
alert( y.toString.toString.toString );
alert( y.toString.toString.toString.toString );
alert( y.toString.toString.toString.toString.toString );
alert( y.toString.toString.toString.toString.toString.toString );
alert( y );
y();


// ------- меняем метод -------
replace_method( window, 'alert', (function( org ) {
    return function(){
        org.call( this, ["Привет: "].concat( [].slice.call( arguments ) ) );
    }
})( window.alert ));
// -------

alert( y.toString );
alert( y.toString.toString );
alert( y.toString.toString.toString );
alert( y.toString.toString.toString.toString );
alert( y.toString.toString.toString.toString.toString );
alert( y.toString.toString.toString.toString.toString.toString );
alert( y );
y();
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием