JavaScriptアドバンストプログラム設計のクライアント検出の癖検出第9.2講義ノート


能力検査と似ています.フェチ検査の目的はブラウザを識別する特殊な行為です.しかし、能力を測定します.
ブラウザがどのような能力をサポートしているかによって、おかしな癖が検出されるのは、ブラウザに何か欠陥があるかを知りたいからです.これは普通です
特定の特性が正常に動作しないことを確認するために、セグメントコードを実行する必要があります.例えば、IE 8およびより早いバージョンの中に、一つのバグが存在する場合、
ある実例的な属性は[Enumerable]とfalseとしてマークされているあるプロトタイプの属性と同名であり、このインスタンスの属性は
fon-nサイクル中です.この「癖」は次のコードで検出できます.
var hasDontEnumQuirk = function(){
var o = { toString : function(){} };
for (var prop in o){if (prop == "toString"){
return false;
}
}
return true;
}();
上記のコードは匿名関数によってこの「癖」をテストし、関数にtoString()メソッドを持つオブジェクトを作成しました.
正しいECMAScript実装では、toStringはfor-inサイクルで属性として返されるべきである.
もう一つは常に検出が必要な「癖」です.Safari 3の以前のバージョンは隠し属性を列挙します.下記の関数で検査できます.
「癖」を測るべきです.
var hasEnumShadowsQuirk = function(){
var o = { toString : function(){} };
var count = 0;
for (var prop in o){
if (prop == "toString"){
count++;
}
}
return (count > 1);
}();
ブラウザがこのバグが存在する場合、for-innを使って、カスタムtoString()メソッドを持つオブジェクトを繰り返し列挙すると、
2つのtoStringの例を返します.
一般的には、「癖」は個別ブラウザならではのもので、通常はバグとして扱われます.関連ブラウザの新しいバージョンでは、この
いくつかの問題は修復されないかもしれません.「癖」の検出は実行コードに関連していますので、それらだけを検査することをおすすめします.
影響を受ける「癖」については、台本の最初からこのような検査を行い、問題を早期に解決することが望ましい.