2011-12-21 2 views

Répondre

1

Il est impossible de savoir si les méthodes du navigateur sont surchargées ou non. par exemple.

function foo(){ 
    return 'foo was called'; 
} 

foo.toString = function() { 
       return 'function alert() {\n [garbage code]\n}'; 
       }; 
var a = window.alert; 
window.alert = foo; 

a(window.alert); 
document.write(alert); 

tout ce que vous pouvez dire est que si vous ne recevez pas la réponse par défaut, la méthode a probablement été modifié depuis la méthode toString des méthodes d'accueil est généralement en lecture seule. Mais si vous obtenez la valeur par défaut, vous ne savez pas si elle a été modifiée ou non.

1

Vous pouvez vérifier

if (/function alert\(\) \{\s*\[native code\]\s*\}/.test(alert)) 

Le regex est nécessaire parce que Firefox retourne les nouvelles lignes. Notez que cela peut facilement être annulé en écrasant alert.toString ou Function.prototype.toString.

+0

Complètement non fiable car la méthode * toString * n'est pas garantie d'être en lecture seule. N'importe qui avec une méthode hôte peut modifier sa méthode 'toString' pour renvoyer n'importe quelle valeur, y compris la valeur par défaut (que je ne pense pas standardisée). – RobG

+0

@RobG: Je l'ai déjà dit. – SLaks

Questions connexes