「JavaScript高級プログラム設計」――DOM

7048 ワード

コードの理解は全部コメントに書いてあります.
8.js
/*
 * BOM -
 * 		-   (         window  )
 * 		- window  (  )	:    
 * 		- location  	:    
 * 		- navigator  	:     
 * 		- screen  		:     
 * 		- history  		:    
 */

	//            ,     windows        (windows           )。

var age = 29;
function sayAge() {
	console.log(this.age);
}
sayAge();					//29
window.sayAge();				//29
console.log(window.age == age);			//true	sayAge      window 。

	//  :                      。   window      。
var age = 29;
window.color = "red";

console.log(delete window.age);			//false:        ,      。
console.log(delete window.color);		//true: windows   ,    。

console.log(window.age);			//29:    。
console.log(window.color);			//undifined:    。
	//  :  var       [Configurable]   false,       。

console.log(oldValue);				//   :      。
console.log(window.oldValue);			//undefined:      ,          。
									//      window                     

//  	(frame.html)	       ,          ,      _(:3 」∠)_ 

/*
 *	window  
 *		-     :		window.screenLeft/window.screenTop	FireFox:	window.ScreenX/window.ScreenY
 *		-     :		window.innerWidth/window.innerHeight/window.outerWidth/window.outerHeight
 *		-          :	window.resizeTo()/window.resizeBy()
 *		-     :		window.open()
 */
//    
	//IE,Safari,Opera,Chrome:screenLeft scrrenTop。
	//FireFox:				:ScreenX ScreenY
	//              :
var leftPos = (typeof window.screenLeft) == "numer"?
				window.screenLeft:window.screenX;
var topPos = (typeof window.screenTop) == "number"?
				window.screenTop:window.screenY;

console.log(leftPos+"..."+topPos);	//"392...147"                         。

console.log(parent == top);				//true:      ,parent     top(     )。
	//IE,Opera:          (        ,screenY        )。
	//Firefox,Safari,Chrome:           (      ,screenY  0)。

//    
	//    :innerWidth,innerHeight,outerWidth,outerHeight
	//OuterWidth,OuterHeight:
		//IE9+,Safari,Firefox:	          。
		//Opera:				        (             )   。
	//Opera ,innerWidth innerHeight       (            )   。
	//Chrome ,inner      outer           :  (viewport)  

//            
var pageWidth = window.innerWidth;
var pageHeight = window.innerHeight;

if(typeof pageWidth != "number") {					//      ,           (     )。
	if(document.compatMode != "CSS1Compat")	{
		pageWidth = document.documentElement.clientWidth;	//     。
		pageHeight = document.documentElement.clientHeight;
	} else {
		pageWidth = document.body.clientWidth;			//     。
		pageHeight = document.body.clientHeight;
	}
}

	//      ,window.innerWidth window.innerHeight       。
	//           ,   document.body.clientWidth document.body.clientHeight 

//          。
	//resizeTo() resizeBy()
	//  resizeTo()               。
	//resizeBy()                 。
window.resizeTo(100,100);		//   100*100
window.resizeBy(100,150);		//   200*250
window.resizeTo(300,300);		//   300*300

//    :
var wroxWin = window.open("http:///www.wrox.com/");		//       
								//     :  URL。
								//     :        。
	//           ,            。

console.log(wroxWin.opener);

var wroxWin = window.open("http:///www.wrox.com/");
wroxWin.close();						//      。
console.log(wroxWin.closed);					//true:    。
console.log(wroxWin.parent);					//window  。
console.log(wroxWin.parent == wroxWin.top);			//true
console.log(wroxWin.opener);					//window   
	//opener               ,     window  (top)    。
	//                     。      ,        opener   null
wroxWin.opener = null;
	//     ,    。

//        :                。
	//    :window.open    null。
var wroxWin = window.open("http:///www.wrox.com/","_blank");
console.log(wroxWin == null);					//false:     。

	//            ,        。    try   。
var blocked = false;							//              。
try{
	var wroxWin = window.open("http:///www.wrox.com/","_blank");
	blocked = true;								//     。
}catch(e){
	blocked = true;								//            。
}

console.log(blocked);

/*
 *		   :	    	setTimeout
 *				    	setInterval	
 */
//setTimeOut               
setTimeout("console.log('executed');",1000);					//executed
var id = setTimeout(function(){console.log("executed");},1000);			//executed
				//        ,         。
				//            ,         (  java  Thread.sleep())
				//  ID       
clearTimeout(id);								//    


//        :setInterval

var num = 0;
var max = 10;
function inte() {				//   : 0 10
	if(num==max)
		clearInterval(id);		//                 id
	console.log(num++);
}

var id = setInterval(inte,1000);

//           。
var num = 0;
var max = 10;

function incrementNumber () {
	num++;
	
	if(num < max) {				//       ,            。
		setTimeout(incrementNumber,1000)
	} else {
		console.log("Done");		//  :    ID。
	}
}

setTimeout(incrementNumber,1000);
	//               ,                       。


//     :
	//1.          。
	//2.     :         ,         。

//alert:   
alert("  !");					//     

//confirm:   。          。
var sure = confirm("   ?");				//    boolean 

if(sure) {						//  OK
	alert("     。");
} else {						//  cancel
	alert("     ,   ");
}

//prompt:   。
var text = prompt("       。");

if(text){						//       。
	alert("       '"+text+"'!");
} else {						//         ,  null。
	alert("      !");
}

//chrome:           ,    ,          。
var i = 0;
while(i<5) {
	alert("   ");
	i++;
}
alert("   ");					//    ,          
confirm("   ");
prompt("   ");

//     :    (       )。
window.print();
window.find();

//location  :                  。
console.log(location.hash);			//URL   hash(#     ,      )
console.log(location.host);			//    
console.log(location.hostname);			//     
console.log(location.href);			//  
console.log(location.pathname);			//      
console.log(location.port);			//   
console.log(location.protocol);			//  
console.log(location.search);			//     

//          :
function getQueryStringArgs() {
	var qs = (loaction.search.length > 0?
						//          
		location.search.substring(1):"");
						//      "?"   ,     
	
	var args = [];
	
	var item = null;
	var name = null;
	var value = null;
	
	var items = qs.length? qs.split("&"):[];
	
	for(var i=0;i