कई विकल्पों के साथ चारों ओर toying के बाद, मेरा मानना है कि यह पता लगाने अगर एक वस्तु एक खिड़की पार ब्राउज़र है के लिए सबसे सही तरीका है:,
(function() {
"use strict";
var wStr;
wStr = Object.prototype.toString.call(window);
function isWindow(arg) {
var e,
str,
self,
hasSelf;
//Safari returns DOMWindow
//Chrome returns global
//Firefox, Opera & IE9 return Window
str = Object.prototype.toString.call(arg);
switch (wStr) {
case '[object DOMWindow]':
case '[object Window]':
case '[object global]':
return str === wStr;
}
///window objects always have a `self` property;
///however, `arg.self == arg` could be fooled by:
///var o = {};
///o.self = o;
if ('self' in arg) {
//`'self' in arg` is true if
//the property exists on the object _or_ the prototype
//`arg.hasOwnProperty('self')` is true only if
//the property exists on the object
hasSelf = arg.hasOwnProperty('self');
try {
if (hasSelf) {
self = arg.self;
}
delete arg.self;
if (hasSelf) {
arg.self = self;
}
} catch (e) {
//IE 7&8 throw an error when window.self is deleted
return true;
}
}
return false;
}
}());
मैं कुछ और अधिक कठोर इकाई-परीक्षण करने की आवश्यकता होगी तो कृपया मुझे उत्पन्न होने वाली किसी भी असंगतता के बारे में बताएं।
तुम सिर्फ 'window' के खिलाफ एक तुल्यता परीक्षण कर सकता हूँ? '(somevar === विंडो)? 'हां': 'नहीं' –
लेकिन अगर यह एक आईफ्रेम विंडो है तो यह काम नहीं करेगा। – mck89
मैं उत्सुक हूँ, आपको ऐसा करने की आवश्यकता क्यों है? –