判断目标是否是window,document,和拥有tagName的Element的代码

复制代码 代码如下:

  function isWindow( obj )

  {

  if( typeof obj.closed == 'undefined' ) return false;

  var result = /\[object (window|global)\]/i.test( Object.prototype.toString.call( obj ) );

  if( result )return result;

  try{

  obj.closed = obj.closed;

  return false;

  }catch(e)

  {

  result = true;

  }

  return result;

  }

  function isDocument( obj )

  {

  if( typeof obj.body == 'undefined' ) return false;

  var b = obj.body;

  try{

  obj.body = null;

  obj.body = b;

  return false;

  }catch(e)

  {

  return true;

  }

  }

  function isElement( o )

  {

  var tn = 'tagName',temp = o[tn],result;

  if( typeof temp == 'undefined' )return false;

  try{

  o[tn] = null;

  result = ( temp == o[tn] );

  o[tn] = temp;

  return result;

  }catch(e)

  {

  return true;

  }

  }

  function getOwnerWindow( node )

  {

  if( isWindow( node ) )return node;

  var doc = isDocument( node ) ? node : node.ownerDocument;

  return doc.view || doc.parentWindiw || doc.defaultView;

  }

  需要充分测试