(jQuery を使用して) フラッシュ オブジェクト (HTMLObjectElement) を作成し、それを DOM に追加しました。それはすべてのブラウザで問題なく動作しています。このオブジェクトは、「o.data.cam」という変数に保存/保存されます。この変数が有効かどうかをチェックする他の関数。
例えば:
if( typeof o.data.cam == "object")
{ do this }
これは、Firefox を除くすべてのブラウザで問題なく動作します。o.data.cam
オブジェクトではなく関数です。オブジェクトが作成されるため、これは奇妙な動作だと思いますが、なぜこれが関数として報告されるのですか?
Firefox 17.0.1 (最新) では、作成された HTMLObjectElement (object タグ) をダンプすると [object HTMLObjectElement] が返されます。ネイティブ関数 => [ネイティブ関数] のように、ネイティブ関数 (保護されている) と同じになる可能性があるため、これ (?) を理解できます。そうでなければ、ほとんどの DOM 要素を検査できるので、少し奇妙です。
ただし、他のブラウザと比較すると、いくつかの相違点に注意する必要があります。
Firefox Chrome MSIE Opera
___________________________________________________________________________________________
dump o.data.cam [object HTMLObjectElement] Object* Object* Object*
typeof o.data.cam "function" "Object" "Object" "Object"
typeof HTMLObjectElement "object" "function" "Object" "function"
- (アスタリスク) = オブジェクト ツリーを出力します
注: - 引用符の間は文字列で、"typeof" の結果です。
typeof 評価は、すべてのブラウザー (Firefox を除く) で "オブジェクト" を返します。これは私の意見では正しいと思います。
私の質問は次のとおりです。これはバグですか、それとも何か不足していますか?
編集:有効なDOM要素であるかどうかを確認するために、この関数を作成しました。この方法で安全ですか?Firefox が true を返すようになりました。
function isDOM(oo)
{
if( oo )
{
if( typeof oo instanceof jQuery )
{ return !!oo[0]; }
if( typeof oo == 'object' || typeof oo == 'function' )
{ return ( typeof oo.tagName == 'string' && oo.tagName.length > 0 ); }
}
return false;
}