2011-12-21 6 views
1

ブラウザが提供する機能がユーザコードに置き換えられているかどうかを確認することはできますか? Firefoxは改行を返すためホスト機能が上書きされたかどうか確認できますか?

function alert(str){ 
    document.write(str); 
} 

alert('hello world'); 
+2

いいえ。ホストオブジェクトが上書きされているかどうかを確認することはできません – Raynos

答えて

1

ブラウザのメソッドがオーバーウイークされているかどうかを知ることは不可能です。例えばあなたが言うことができるすべてについて

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); 

は、デフォルトの応答を取得しない場合は、ホスト・メソッドののtoString方法が一般的に読み取り専用であることから、この方法はおそらく変更されたということです。しかし、デフォルトを取得した場合、変更されたかどうかはわかりません。

1

あなたは正規表現が必要である

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

確認することができます。

alert.toStringまたはFunction.prototype.toStringを上書きすると簡単に無効にすることができます。

+0

* toString *メソッドは読み取り専用であることが保証されていないため、完全に信頼性がありません。誰かがホストメソッドを使いこなすならば、 'toString'メソッドを変更して、デフォルト(これは私がどこにでも標準化されているとは思わない)を含めた任意の値を返すことができます。 – RobG

+0

@RobG:私はすでに言った。 – SLaks

関連する問題