Est-il possible de vérifier si une fonction fournie par un navigateur a été remplacée par un code utilisateur?Puis-je savoir si une fonction hôte a été écrasée?
function alert(str){
document.write(str);
}
alert('hello world');
Est-il possible de vérifier si une fonction fournie par un navigateur a été remplacée par un code utilisateur?Puis-je savoir si une fonction hôte a été écrasée?
function alert(str){
document.write(str);
}
alert('hello world');
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.
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
.
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
@RobG: Je l'ai déjà dit. – SLaks
no. Il n'est pas possible de vérifier si un objet hôte est remplacé – Raynos