객체가 window인지 여부를 결정합니다.
3627 단어 window
alert(Object.prototype.toString.call(window))
실행 코드
결과는 다양했다.
혁혁한 명성이 어떻게 판정되는지 보면 setInterval이라는 속성이 존재하는지 판정할 수 있다.
어쩔 수 없이 하나하나 그 속성을 검사하여 어떤 특별한 속성이 있는지 보자.마침내 같은 이름의 윈도우 속성이 발견되었는데, 이것은 무한 순환으로 자신을 인용하는 것이다.이것은 IE에서 문제가 좀 있습니다.
alert(window === window.window)
실행 코드
IE 는 false 를 팝업하고 다른 브라우저는 true 를 팝업합니다.그러나 다음과 같이 모든 브라우저가 통합됩니다.
alert(window == window.window)
실행 코드
엄격한 판정이 있나요?윈도우는 무한 순환으로 자신을 인용한다는 것을 잊지 마라. 이전 자신을 인용한다고 해야 한다.따라서 다음과 같은 이점을 얻을 수 있습니다.
alert(window.window === window.window.window)
실행 코드
최종 결과:
var isWindow = function(obj){
return obj.window === obj.window.window
}
====================화려한 분계선 =============================
아이보니의 영감 감사합니다!
var dom = {};
dom.isWindow = function(obj){
if(!obj || !obj.window || !obj.document )
return false;
var expando = "dom"+ (new Date-0)//임의 변수 이름 생성
var doc = obj.document;
//전역 해석 코드, IE의 eval은 원 역할 영역에만 유효
//자세히 보기http://www.javaeye.com/topic/519098
//게다가 eval과 with는 html5 엄격한 모드에서 금지해야 하는 물건으로 버려도 소용없다!
try{
var js = doc.createElement("script");
var head = doc.getElementsByTagName("head")[0];
head.insertBefore(js,head.firstChild);
js.text = expando + "= {};"
head.removeChild(js);
var ret = (doc.parentWindow || doc.defaultView)[expando] === obj[expando];
obj[expando] = void 0;
}catch(e){
return false;
}
return ret;
}
var test1 = {};
test1.window = test1;
test1.document = document;
alert(dom.isWindow(test1))
var test2 = {};
test2.window = window;
test2.document = document;
alert(dom.isWindow(test2))
alert(dom.isWindow(window))
실행 코드
2011.10.4 업데이트
var dom = {},
windowString = {
"[object Window]":1,
"[object DOMWindow]":1,
"[object global]":1
};
by 사도정미http://www.cnblogs.com/rubylouvre/
dom.isWindow = function(obj){
if (!obj|| typeof obj!="object")//는 개체여야 합니다.
return false;
if(windowString[windowString.toString.call(obj)])
return true;
return obj == obj.document && obj.document != obj
}
//테스트 코드
var test1 = {};
test1.window = test1;
test1.document = document;
alert(dom.isWindow(test1))//false
var test2 = {};
test2.window = window;
test2.document = document;
alert(dom.isWindow(test2))//false
alert(dom.isWindow(window))//true
var iframe = document.createElement("iframe");
document.body.appendChild(iframe);
var iwin = iframe.contentWindow || iframe.contentDocument.parentWindow;
alert(dom.isWindow(iwin));//true
document.body.removeChild(iframe);
var wg = { document : {} }, wgdoc = wg.document;
wg.window = wg;
wgdoc.createElement = function(){return wg; };
wgdoc.getElementsByTagName = function(){ return [wg]; };
wgdoc.parentWindow = wg;
wg.insertBefore = function(){};
wg.firstChild = wg.firstChild;
wg.removeChild = function(){};
alert(dom.isWindow(wg));//false
실행 코드
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
TIL - Window global object자바스크립트가 돌아가는 플랫폼은 호스트(host) 라고 불립니다. 호스트는 브라우저, 웹서버, 심지어는 커피 머신이 될 수도 있습니다. 각 플랫폼은 해당 플랫폼에 특정되는 기능을 제공하는데, 자바스크립트 명세서에선 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.