window_windows - CSDN
精华内容
参与话题
  • js的window对象与属性的使用

    千次阅读 2018-12-16 12:02:15
     浏览器对象:window对象。  Window 对象会在 <body> 或 <frameset> 每次出现时被自动创建。 2. window对象 window对象是BOM中所有对象的核心。BOM Browser Object Model 3.window...

    1.BOM的概述
        browser object modal :浏览器对象模型。
        浏览器对象:window对象。
        Window 对象会在 <body> 或 <frameset> 每次出现时被自动创建。

    2. window对象

    window对象是BOM中所有对象的核心。BOM    Browser  Object Model

    3.window对象的属性

    window.open(), (打开窗口)
    window.close(), (关闭一个窗口)
    window.self()(窗口本身)  
    window.focus()(使当前的窗口在所有窗口之前. )
    window.status=”内容” (js中状态栏显示内容:)
    window.navigate(”http://www.google.com”); (js中的窗口重定向:)
    window.print() (js中的打印:)
    window.prompt(”message”,”defaultreply”); (js中的提示输入框:)
    window.scroll(x,y) (js中的窗口滚动条)
    window.scrollby(js中的窗口滚动到位置:)
    window.history.back()返回上一页
    window.history.forward()返回下一页,
    window.history.go(返回第几页,也可以使用访问过的url) 如果是0那么就是刷新
    history.length 
    window.createElement
    

    1.(位置类型-获得浏览器的位置)
    IE:
    window.screenLeft
    可以获得浏览器距屏幕左上角的左边距  
    window.screenTop
    可以获得浏览器距屏幕左上角的上边距

     FF:  
    alert(screenX)  
    alert(screenY)

    //IE
    左边距
    alert(screenLeft)
    上边距
    alert(screenTop)
    
    //FF
    左边距
    alert(screenX)
    上边距
    alert(screenY)

    (获得浏览器的尺寸)

    FF:window.innerWidth  获得窗口的宽度
    window.innerHeight  获得窗口的高度

    //FF:
    alert(window.innerWidth);
    alert(window.innerHeight);
    //IE:
    alert(document.documentElement.clientWidth)
    alert(document.documentElement.clientHeight)
    

    2.窗体控制

    screen对象记录了客户端显示屏的信息

    a.属性

    availHeight   返回显示屏幕的高度 (除 Windows 任务栏之外)。

    availWidth    返回显示屏幕的宽度 (除 Windows 任务栏之外)。

    height       返回显示屏幕的高度。

    width        返回显示屏幕的宽度。

    <script>
      document.write(screen.availHeight)
      document.write("<br/>")
      document.write(screen.height)
       document.write("<hr/>")
      document.write(screen.availWidth)
       document.write("<br/>")
      document.write(screen.width)
    </script>

    b.方法

    对窗体的移动,window.moveBy(x,y)  相对于当前位置沿着X\Y轴移动指定的像素,如负数是反方向。moveTo(x,y)  相对于浏览器的左上角沿着X\Y轴移动到指定的像素,如负数是反方向。

    窗体尺寸的改变,resizeBy(x,y)  相对于当前窗体的大小,调整宽度和高度。resizeTo(x,y)  把窗体调整为指定宽度和高度

    script>
    //窗体控制
    //位置
    moveBy(100,100);
    //moveTo(200,200)
    //尺寸
     window.resizeBy(100,100)
    resizeTo(400,400)
    </script>

    对窗体滚动条的控制,scrollBy(x,y) 相对于当前滚动条的位置移动的像素(前提有滚动条)。scrollTo(x,y) 相对于当前窗口的高度或宽度,移动到指定的像素

    scrollBy(0,100)
    scrollTo(0,200)

    innerHeight: 
    innerWidth:  IE不支持

     </head>
    	<script type="text/javascript">
    	<!--
    		  /*
    			window对象的属性:
    					  1.innerHeight: 返回文档显示区的高度  
    					  2.innerWidth: 返回文档显示区的宽度   IE不支持
    						  通用写法: window.document.body.clientWidth ;
    					  3. outerheight  包括了工具栏,菜单栏等的高度
    					  4. outerwidth   包括滚动条的宽度
    
    		  */
    		function init(){
    			var x = window.document.body.clientWidth ;
    			var y = window.document.body.clientHeight ;
    			alert(x + ":" + y) ;
    		}
    	//-->
    	</script>
     <body onload = "init()">
           <p>你好</p>
     </body>

    3.window.event window事件

    获取事件对象,当没有事件发生的时候为null。

     window.event
     window.onload=function  (e) {
    	 e
    	 var ev=e||window.event;
    }

    a.鼠标事件

    相对于浏览器位置的(左上角为(0,0))
         clientX  当鼠标事件发生的时候,鼠标相对于浏览器X轴的位置
         clientY  当鼠标事件发生的时候,鼠标相对于浏览器Y轴的位置

    相对于屏幕位置的
         screenX   当鼠标事件发生的时候,鼠标相对于屏幕X轴的位置
         screenY

      window.onload=function  (e) {
         window.event
    	 var ev=e||window.event;
    	 var div1=document.getElementById("div1");
         document.onmousemove=function  (e) {
           var ev=e||window.event;
    	   var cx=ev.clientX;
    	   var cy=ev.clientY;
    	   var sx=ev.screenX;
    	   var sy=ev.screenY;
    	   div1.innerHTML="cx:"+cx+"--cy:"+cy+"<br/>sx:"+sx+"--sy:"+sy;
    	 }
    }
    
    <div id="div1" style="width:200px;height:200px;border:1px solid red">

    相对于事件源的位置
    IE:
    offsetX   当鼠标事件发生的时候,鼠标相对于事件源X轴的位置
    offsetY

    FF:
    layerX   当鼠标事件发生的时候,鼠标相对于事件源X轴的位置
    laterY

     window.onload=function  (e) {
         window.event
    	 var ev=e||window.event;
    	 var div1=document.getElementById("div1");
         div1.onclick=function  (e) {
         var ev=e||window.event;
    	 var ox=ev.offsetX ||ev.layerX;
    	 var oy=ev.offsetY ||ev.layerY;
         div1.innerHTML="ox:"+ox+"--oy:"+oy;
         }

    具体使用

    模拟窗口拖拽

    divs=document.createElement("div");	  
     divs.onmousedown=function  (e) {
            var ev=e||window.event;
            var ox=ev.offsetX ||ev.layerX;//第一次点击div不能动,相对于事件源的位置
    	     var oy=ev.offsetY ||ev.layerY;
    		 var ok=true;//标识鼠标放开的时候还移动
    		this.onmousemove=function  (e) {//移动的时候跟随鼠标移动
    		   if(ok){
    		   var ev=e||window.event;
    		   var cx=ev.clientX;
    		   var cy=ev.clientY;
    		   this.style.top=cy-oy+"px";//绝对定位
    		   this.style.left=cx-ox+"px";
    		   }
    		}
    		this.onmouseup=function  () {
             if(ok){
    		   ok=false;
    		 }
    	   }
    	   }
    
    <input type="button" id="but">

    b.键盘事件对象

    keyCode  获得键盘码
    空格:32   回车13  左上右下:37 38 39 40
    altKey   判断alt键是否被按下  按下是true 反之是false   布尔值
    ctrlKey   判断ctrl键
    shiftKey 判断shift键
    type   用来检测事件的类型   主要是用于多个事件通用一个事件处理程序的时候

    document.body.onkeydown=function  (e) {
    	   var ev=e||window.event;
    	   ev.keyCode
    	   ev.altKey
    	   ev.type
    }

    具体使用

    点击提交,内容自动读取

    <Script>
      window.onload=function  () {
        var one=document.getElementById("one");
        var texts=document.myform.texts;
    	var but=document.myform.but;
    	but.onclick=texts.onkeydown=function  (e) {//回车
    	   var ev=e||window.event;
           if(ev.type=="click" ||(ev.type=="keydown" && ev.keyCode==13 && ev.ctrlKey==true)){
    	      var elep=document.createElement("p");
    		  elep.innerHTML=texts.value;
    		  elep.className="pone";
    		  one.appendChild(elep);
    		  texts.value="";
    
    	   }
    	}
    
      }
    </script>
    
    
    <body>
    <div id="one" style="width:400px; background-color:#eeeeee;padding:10px">
      <h3>
         留言记录:
      </h3>
      <hr/>
      <p class="pone">
         你好
      </p>
    </div>
    <form name="myform">
      <textarea name="texts" cols=50 rows=10>
      </textarea>
      <input type="button" value="提交" id="but">
    </form>
    </body>

    4.关系类型

     A.parent返回父窗口
     B.top返回顶层窗口

     C.self===window

     D.stutas  设置窗口状态栏的文本

    <script>
      window.onload=function  () {
         alert(top===parent)
    	window.status="自定义的状态栏文字"
    	alert(frames[0])
      }
    </script>
    
    <frameset rows="20%,*">
       <frame src="top.html" >
       <frameset cols="20%,*" >
       <frame src="left.html" >
       <frame src="right.html" >
       </frameset>
    </frameset>

    self :等同于window对象
    opener:当前打开窗口的父窗口对象,支持opener.opener…的多重继续。
                       2种情况下使用opener:
                       1.使用winodw.open()方法打开的页面
                       2.超链(里面的target属性要设置成_blank)
    open方法,是打开一个页面.

    js中分为两种窗体输出:模态和非模态.window.showmodaldialog(),window.showmodeless()

    js的window.open()方法的使用

    open(string method,string url,boolean asynch,String username,string password)

    指定和服务器端交互的HTTP方法,URL地址,即其他请求信息;
    method:表示http请求方法,一般使用"GET","POST".
    url:表示请求的服务器的地址;
    asynch:表示是否采用异步方法,true为异步,false为同步;
    后边两个可以不指定,username和password分别表示用户名和密码,提供http认证机制需要的用户名和密码。

            		var url = "completeFormone.html?s=" + Math.random()+"&installAcceptId="+rows[0].installAcceptId;
            		window.open(url);

    打开新的窗口,open(url,name,feafurse,replace) 通过脚本打开新的窗口。

    open("test.html","windows","status=0,menubar=0,toolbar=0")
     window.onload=function  () {
        var names=document.getElementById("names");
    	var but=document.getElementById("but");
    	but.onclick=function  () {
    	  open("test.html","windows","status=0,menubar=0,toolbar=0")
    	}
     }

    模态和非模态.window.showmodaldialog(),window.showmodeless()

    showmodaldialog(”url”[,arguments][,features])

    重新打开一个页面

    	<script type="text/javascript">
    	<!--
    		function fun(){
    		
    			window.open("sub.html","","width=200,height=200,status=no,titlebar=no,menubar=no,toolbar=no,resizable=0") ;
    		}
    	//-->
    	</script>
     <body>
    	<input type="button" value="打开sub.html页面" onclick="fun()">
     </body>
    		  function fun(){
    			 self.open("sub.html") ;
    		  }
    
    	</script>
     <body>
          <input type="text" name="" id = "txt"> 
    	  <input type="button" value="打开sub.html页面" onclick="fun()">
    
    	  <a href = "sub.html" target = "_blank">打开sub.html页面</a>
     </body>

    openWindow()参数的传递与关闭刷新

    点击弹出一个新窗口

    	afvButton.click(function(){
    		debugger;
    		var orandid = $($("body input[id='orandid_view_act']"),$("div[id='divMain']",$("body",parent.document)).context.activeElement).val();
    		var volid = _grid.getIds();
    		openWindow(volid+"&volType=1",orandid);
    	})
    
    function openWindow(ids,orandid){
    	var options = {
    		modal : true,
    		title : "站箱调压器AFV检修记录",
    		collapsible : false,
    		minimizable : false,
    		maximizable : false,
    		closable : true,
    		closed : false
    	};
    	var uid = "self_card_";
    	options["id"] = uid;
    	winFormDesigner = UIFactory.getUI(uid);
    	if(!winFormDesigner){
    		winFormDesigner = UIFactory.create(xpad.ui.Window, options);
    	}
    	var root = jQuery("body");
    	var offset = root.offset();
    	var winleft = 0;
    	var wintop = 0;
    	var newSize = {};
    	newSize["left"] = 0;
    	newSize["top"] = 0;
    	newSize["width"] = jQuery("body").width();
    	newSize["height"] = jQuery("body").height();
    	winFormDesigner.window("resize", newSize);
    	setTimeout(function(){
    			winFormDesigner.loadURL(Leopard.getContextPath() + "/platform/views/cusviews/devMatainView/afvVoltage.jsp?ids="+ids+"&orandid="+orandid);
    		
    	}, 0);
    }
    

    设置窗口的滚动条

    为class为list_wrap增加overflow:auto属性,并动态设置高度

    如果内容被修剪,则浏览器会显示滚动条,以便查看其余内容

    <script type="text/javascript">
    $(function(){
    var height = $(window).height();
    $(".list_wrap").css("height",height);	
    })
    </script>
    

    参数的传递

    jsp获取openWindow传递的参数

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
    <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
    
    <c:set var="ctx" value="${pageContext.request.contextPath}" />
    <input id="root" type="hidden" value="${ctx }"/>
    <input id="ids" type="hidden" value="<%=request.getParameter("ids") %>"/>
    <input id="volType" type="hidden" value="<%=request.getParameter("volType") %>"/>
    <input id="orandid" type="hidden" value="<%=request.getParameter("orandid") %>"/>

    js获取jsp页面的值

    var root = null;
    var ids = null;
    var xcbh = null;
    
    
    $(document).ready(function() {
    	root = $("#root").val();
    	ids = $("#ids").val();
    	volType = $("#volType").val();
    	orandid = $("#orandid").val();
    	initpage();
    });
    
    function initpage(){
    	var isRead = $("#isRead").val();
    	if(isRead && isRead=="true"){
    		$(".tb_query").show();
    	}else{
    		$(".tb_query").hide();
    	}
    	root = $("#root").val();
    	
    	showTime();
    	
    	if(ids!="null"){
    		readxctyz();
    		readxctyzx();
    	}
    	var timer = "";
    	$("#save").click(function(){
    		xctyz();
    		$(this).attr("disabled", true); 
    		timer = setTimeout(function(){
    			$("#save").attr("disabled", false); 
            },6000);
    
    	})
    	
    	 $("#reset").click(function(){
    		    tjbxxcz();
    		    tyzxccz();
    	})
    }

    后台接收参数

    	@SuppressWarnings("unchecked")
    	@RequestMapping("/Addxctyz")
    	@ResponseBody
    	public Boolean Addxctyz(HttpServletRequest request, HttpServletResponse response,String requestParam){
    		String orandid = request.getParameter("orandid ");
    		String ids = request.getParameter("ids");
    }

    关闭openwindow刷新页面

    在外面div设置刷新按钮

    if($("#reloadGrid").length==0){
    	$("#SY_TYZJKXC-QForm .formBody").append("<button id='reloadGrid' style="dispaly:none">刷新</button>");
    	$("#reloadGrid").hide();
    	$("#reloadGrid").click(function(){
    		_grid.reload();
    	});
    }

    返回刷新外层div

        $.ajax({  
            url:root + "/AddAfv",  
            data:param,  
            type:"post",  
            dataType:"json",  
            success:function(data){  
                alert("保存成功");  
                debugger;
                $($("#reloadVolGrid",$("#layout_RECODR_MAINTAIN_VOLTAGE_listbar",parent.$(".panel window").context))).click();
            },  
            error:function(){  
            	alert("服务器正忙,请稍后重试");  
            }  
        }) 

    窗口全屏大小:

    <script>function fullscreen(){ this.moveto(0,0);this.outerwidth=screen.availwidth;this.outerheight=screen.availheight;}window.maximize=fullscreen;</script> 
    

    close方法

     <body>
    	<script type="text/javascript">
    	<!--
    		window.close() ;
    	//-->
    	</script>
     </body>

    parent:是打开窗口的父窗口对象

    2种情况下使用parent:
                       1.iframe 框架
                       2.frame 框架
    frames[]: 数组类型,代表子窗口的window对象的集合,可以通过frames[索引]拿到子窗口的window对象。
    示例:父子窗口相互传参.

      <title>window对象的parent属性</title>
     </head>
    	<script type="text/javascript">
    	<!--
    		function fun(){
    			//1.拿到文本框中填写的数据
    			   var v = document.getElementById("txt").value ;
    			//2.拿到子窗口对象
    			   var w = window.frames[0];
    			//3.拿到子窗口中的文本框对象
    			   var txt = w.document.getElementById("txt") ;
    			//4.将内容赋值给父窗口中的文本框对象的value属性
    				txt.value = v ;
    		}
    	//-->
    	</script>
     <body>
    	  姓名:<input type="text" name="" id = "txt"><input type="button" value="传递数据到子窗口中" onclick="fun()">
    	  <iframe src = "sub1.html"></iframe>
     </body>

    sub1.html

     </head>
    	<script type="text/javascript">
    	<!--
    		function fun(){
    			//1.拿到文本框中填写的数据
    			   var v = document.getElementById("txt").value ;
    			//2.拿到父窗口对象
    			   var w = window.parent;
    			//3.拿到父窗口中的文本框对象
    			   var txt = w.document.getElementById("txt") ;
    			//4.将内容赋值给父窗口中的文本框对象的value属性
    				txt.value = v ;
    		}
    	//-->
    	</script>
     <body>
          <input type="text" name="" id = "txt"><input type="button" value="传递数据到父窗口中" onclick="fun()">
     </body>

     对话框:
    1)消息框 alert() ;
    2)确认框 confirm() ;
    3)输入框 prompt() ; (了解)

    	<script type="text/javascript">
    	<!--
    		/*
    			三种对话框:1. 消息框:alert() ;
    					    2. 确认框: confirm() :返回Boolean类型的值
    						3. 输入框: prompt(): 返回输入的字符串(了解)
    		*/
    		//window.alert("你好") ;
    
    		/*while(true){
    			if(confirm("你爱我吗?") == false)
    			   continue ;
    			break ;
    		}*/
    
    		var a = prompt("请输入年龄:",12) ;
    		alert(a) ;
    	//-->
    	</script>

    window的模态窗体

     <body>
    	  <script type="text/javascript">
    	  <!--
    		   /*
    			    模态窗体:
    		   */
    
    		 //  window.showModalDialog("你好") ;  
    		  window.showModelessDialog("你好");
    	  //-->
    	  </script>
     </body>

    history对象

    history对象包含浏览器访问过的url,浏览器的历史记录访问

    <Script>
      window.onload=function  () {
         var one=document.getElementById("one");
    	 one.onclick=function  () {
    	    history.forward()
                history.back()
    		history.go(-3)
    		history.go(3)
    	 }
      }
    </script>
    
    <body>
    <p>
       history1.html
    </p>
    <script>
      alert(history.length)
    </script>
    <a href="history2.html">链接到2</a>
    <input type="button" value="前进" id="one">
    
    </body>

    a.  forward()前进  b.  back() 后退  c.  go(n) 正数是前进,负数是后退.

     </head>
    	 <script type="text/javascript">
    	 <!--
    		  /*
    			   history对象存储了访问过的页面。
    		  */
    
    		  function fun(){
    				history.forward();
    		  }
    	 //-->
    	 </script>
     <body>
    	  <a href = "b.html">b.html</a>
    	  <input type="button" value="前进" onclick="fun()">
     </body>

    b.html

     <script type="text/javascript">
    	 <!--
    		  /*
    			   history对象存储了访问过的页面。
    		  */
    
    		  function fun(){
    				history.forward();
    		  }
    
    		  function fun1(){
    			   history.back() ;
    		  }
    
    		  function fun2(){
    			   history.go(2) ;
    		  }
    	 //-->
    	 </script>
     <body>
    	  <a href = "c.html">c.html</a>
    	  <input type="button" value="前进" onclick="fun()">
    	  <input type="button" value="后退" onclick="fun1()">
    	  <input type="button" value="直接去d页面" onclick="fun2()">
     </body>

    c.html

     <script type="text/javascript">
    	 <!--
    		  /*
    			   history对象存储了访问过的页面。
    		  */
    
    		  function fun(){
    				history.forward();
    		  }
    
    		  function fun1(){
    			   history.back() ;
    		  }
    
    		  function fun2(){
    			   history.go(-2) ;
    		  }
    	 //-->
    	 </script>
     <body>
    	  <a href = "d.html">d.html</a>
    	  <input type="button" value="前进" onclick="fun()">
    	  <input type="button" value="后退" onclick="fun1()">
    	  <input type="button" value="直接去a页面" onclick="fun2()">
     </body

    d.html

     <script type="text/javascript">
    	 <!--
    		  /*
    			   history对象存储了访问过的页面。
    		  */
    
    		  function fun1(){
    			   history.back() ;
    		  }
    
    		  function fun2(){
    			   history.go(-3) ;
    		  }
    	 //-->
    	 </script>
     <body>
    	  <input type="button" value="后退" onclick="fun1()">
    	  <input type="button" value="直接去a页面" onclick="fun2()">
     </body>

    location对象

    location对象包含有当前url的相关信息
    1.href 属性: 是指要连接到其他的URL,返回完整的url
                            写法一、window.location.href='demo_window对象的close方法.html' ;
                            写法二、window.location='demo_window对象的close方法.html' ;

    1.reload方法: 刷新
                写法: window.location.reload() ;

    2.search   返回url?后面的查询部分

    3.protocol(http:),

    4.hostname(www.example.com)

    5.port(80)

    6.host(www.example.com:80)

    7.pathname(”/a/a.html”)

    8.hash(”#giantgizmo”,指跳转到相应的锚记)

    方法

    assign()   加载新的文档

    reload(boolean)   重新加载文档, 当参数是true,任何时候都会重新加载,false的时候,只有在文档改变的时候才会加载,否则直接读取内存当中的。

    replace() 用新的文档代替当前的文档  (没有历史记录)

    location.href="location2.html?1234"
    location.assign("location2.html");
    location.reload()
    location.replace("location2.html")
    
    
    window.location.reload()(刷新当前页面.)
    
    window.location.href=”url” (指定当前显示链接的位置)
    
    parent.location.reload()刷新父亲对象(用于框架)
    
    opener.location.reload()刷新父窗口对象(用于单开窗口)
    
    top.location.reload()刷新最顶端对象(用于多开窗口)
    
    
    	<script type="text/javascript">
    	<!--
    		/*1 href属性
    		  2. reload()方法:重新加载本页面
    		*/
    		function fun(){
    			//window.location.href = "b.html" ;
    			window.location = "b.html" ;
    		}
    
    		function fun1(){
    			window.location.reload();
    		}
    	//-->
    	</script>
     <body>
    		<input type="button" value="直接去b.html" onclick="fun()">
    		<input type="button" value="重新加载本页面" onclick="fun1()">
     </body>

    跳转到其他页面

    window.location.href=CONTEXT_PATH + "/subjectClassify/showSubjectClassifyNewsList?act=" + WebConst.EDIT+"&entityId="+subjectClassifyId;

    window.location.href在当前页面重新打开连接

       <div class="tit"><span onclick="ProdataShow.indexSkip('device')">资产信息</span></div>
    
            <div class="wrap_sub" style="height: 50%;">
             <div class="wraper">
                <div class="tit"><span onclick="ProdataShow.indexSkip('rushRepair')">应急抢修</span></div>
                <div class="con" id="demo1"></div>
             </div>
            </div>
    <script type="text/javascript" src="${rc.contextPath}/view/cusviews/js/index.js"></script>

    index.js

    $(function(){
    	ProdataShow.initOther();
    });
    
    /**
     * 首页
     */
    var ProdataShow = {
    		initOther:function(){
    			$(".amap-maptypecontrol").css("top","38px");
    			$(".amap-toolbar").css("top","86px");
    		},
    		
    		/**
    		 * 首页各个功能跳转
    		 * type:device-资产信息、rushRepair-应急抢修、pipeRun-管网运行、produceWork-生产作业
    		 * leakCheck-泄露检测
    		 */
    		indexSkip:function(type){
    			if($.isEmptyStr(type)){
    				layer.alert('地址不存在!', {icon: 0});
    				return;
    			}
    			var url = ""
    			switch(type)
    			{
    			case 'device':
    				url = CONTEXT_PATH + "/cusviews/dev/index";
    				break;
    			case 'rushRepair':
    				url = CONTEXT_PATH + "/cusviews/rush/index";
    				break;
    			case 'pipeRun':
    				url = CONTEXT_PATH + "/cusviews/pipe/index";
    				break;
    			case 'produceWork':
    				url = CONTEXT_PATH + "/cusviews/produce/index";
    				break;
    			case 'leakCheck':
    				url = CONTEXT_PATH + "/cusviews/leak/index";
    				break;
    			default:
    				url = CONTEXT_PATH + "/cusviews/index";
    			}
    			window.location.href = url;
    		}
    
    		
    }

    定时器倒数跳转其他页面

    <script>
    window.onload=function  () {
    setTimeout(function  () {
       location.href="location1.html";
    },3000)
    
    var num=document.getElementById("num")
    var nums=3
    setInterval(function  () {
        nums--
    	num.innerHTML=nums;
    },1000)
    }
    
    </script>
    <center>
    <div id="out">
       <div class="one">
       </div>
       <div class="two">
          3秒钟以后跳转
    	  <p id="num">
    	     3
    	  </p>
       </div>
    </div>
    </center>


     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • window表示窗口的概念,平时开发中使用不多,但是某些时候我们需要在桌面上显示一个类似悬浮窗的东西(比如系统弹的吐司:Toast,就是在window上弹得)那么这种效果就需要window来实现。 一、简单介绍 1、window是...

    window表示窗口的概念,平时开发中使用不多,但是某些时候我们需要在桌面上显示一个类似悬浮窗的东西(比如系统弹的吐司:Toast,就是在window上弹得)那么这种效果就需要window来实现。

    一、简单介绍

    1、window是一个抽象类,他的具体唯一实现类phonewindow
    2、创建window使用windowmanager即可,windowmanager是外界访问window的入口
    3、window的具体实现位于windowManagerService中,windowmanager和windowManagerService的交互是一个ipc过程
    4、安卓中所有的视图都是通过window来呈现的,不管是activity,dialog还是toast,他们视图实际上都是附加在window上的
    5、通过view的事件分发机制我们知道,事件由window传递给decorview,然后由decorview传递给我们的view,就连activity的setContentView底层也是通过window来完成的。

    二、 window添加view的简单栗子

    我们就向系统级别的window添加view
    1、声明权限
      <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
    
    2、简单Demo
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            // 打开权限设置  设置允许后 就可以 在window上显示按钮
            if (Build.VERSION.SDK_INT >= 23 && !Settings.canDrawOverlays(this)) {
                Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivityForResult(intent, 1);
            } else {
    
                Button button = new Button(this);
                button.setText("按钮");
    
                //1 声明布局参数
                WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(
                        WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT,
                        0, 0, PixelFormat.TRANSPARENT);
    
                // 设置flag
                layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                        | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                        | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
    
                layoutParams.gravity = Gravity.CENTER;
                layoutParams.x = 100;
                layoutParams.y = 100;
                // 8.0 处理
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
                } else {
                    layoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
                }
    
                // 2、添加到window
                WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
                windowManager.addView(button,layoutParams);
            }
    
        }
    
    }
    
    

    app运行跳转权限界面,我们允许相关的显示权限即可。如下图桌面上显示出来了
    在这里插入图片描述

    代码很简单就是else中的逻辑就三步
    1、声明布局参数: WindowManager.LayoutParams
    2、设置一些布局参数(主要是flag、type的设置)
    3、添加到window(通过windowmanager就可以添加了)

    三、window的参数和WindowManager

    上面的栗子中有个重要的类:WindowManager.LayoutParams这个类是WindowManager的内部类用来管理window的参数。

    1、Flags:表示window的属性,flags有很多,通过这些flags可以控制window的显示特性。接下来总结常见几种:
    • FLAG_NOT_FOCUSABLE
      表示window不需要获得焦点,也不需要各种输入事件(跳不出软键盘)此标记同时也会开启FLAG_NOT_TOUCH_MODAL标记,最终事件传递给具有焦点的window。

    • FLAG_NOT_TOUCH_MODAL
      这个标记设置后,系统会将当前window以外的单击事件,传递给底层的window,当前window以内的点击事件自己处理。这个标记很重要一般来说都开启,否则其他window我发收到单击事件。

    • FLAG_SHOW_WHEN_LOCKED
      表示Window可以在锁屏界面上显示,只适用于最顶层的全屏幕Window
      ps:这个参数在AIP27时过期了,推荐使用 R.attr.showWhenLocked参数或者Activity.setShowWhenLocked(boolean)。

    2、Type:表示window的类型。window有三种类型
    • 应用Window:对应着一个Activity。
    • 子Window:不能单独存在,附属在父Window中,比如Dialog。
    • 系统Window:需要声明权限,比如Toast、系统状态栏。

    Window是分层的,每个Window都有对应的z-ordered,大层级的Window会覆盖在小层级的上面。层级就对应着Type参数。

    用用window的层级范围:1-99
    子window的层级范围:1000-1999
    系统Window的层级范围:2000-2999

    1、我们上文使用的:
    layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
    TYPE_APPLICATION_OVERLAY这个type进入源码发现其数值为2038
    2、我们上文使用的:
      layoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
      TYPE_SYSTEM_ALERT进入源码我们发现其数值为2003
    

    如果想要window位于所有的window的最顶层,只需要采用较大的层级即可(type使用大数值的),很显然系统window的层级时最大的而且系统层级有很多值我们一般使用TYPE_APPLICATION_OVERLAY或者TYPE_SYSTEM_ALERT都可,同时采用系统类型window需要加权限(我们栗子中使用就是系统类型window)。

    3、 WindowManager

    WindowManager所提供的功能很简单,常用的有三个方法:
    1、 addView添加view
    2、updateViewLayout更新 view
    3、 removeView 删除view
    这三个方法定义在viewManager这个接口中WindowManager是他的实现类

    如果我们想要窗口上的view可以触摸滑动只需要给view设置触摸事件,在触摸事件中不断修改布局参数的位置,在调用updateViewLayout更新view即可

    四、window的内部机制

    1、window是一个抽象概念,每个window都对应一个view和和一个viewRootImpl
    2、window通过viewRootImpl和view建立联系,所以window不是真实存在的,他是以view的形式存在。
    3、我们无法直接访问window,windowManager提供了操作window的api,他的常用方法也也是针对view的。
    为了分析window的机制我们从window的添加、删除、更新说起

    1、window的添加过程

    window的添加过程是通过windowManager的addview来完成的,windowManager也是一个接口,他的实现类是windowManagerImpl接下来我们看看其三大操作(添加删除更新)源码:

    // mGlobal 是 WindowManagerGlobal 对象
        public void addView( View view,  ViewGroup.LayoutParams params) {
            mGlobal.addView(view, params, mContext.getDisplay(), mParentWindow);
    }
    
        public void updateViewLayout(View view, ViewGroup.LayoutParams params){
            mGlobal.updateViewLayout(view,params);
        }
        public void removeView(View view){
            mGlobal.removeView(view);
        }
    

    可以看到windowManagerImpl并没有直接实现而是交给了WindowManagerGlobal 去实现

    WindowManagerGlobal 的addview源码
    public void addView(View view, ViewGroup.LayoutParams params,
            Display display, Window parentWindow) {
        // 检查参数
        if (view == null) {
            throw new IllegalArgumentException("view must not be null");
        }
        if (display == null) {
            throw new IllegalArgumentException("display must not be null");
        }
        // 判断params是否是WindowManager.LayoutParams类型的
        if (!(params instanceof WindowManager.LayoutParams)) {
            throw new IllegalArgumentException("Params must be WindowManager.LayoutParams");
        }
        
        final WindowManager.LayoutParams wparams = (WindowManager.LayoutParams) params;
        // 如果有父Window,就根据type赋值params的title和token
        if (parentWindow != null) {
            parentWindow.adjustLayoutParamsForSubWindow(wparams);
        } else {
            final Context context = view.getContext();
            if (context != null
                    && (context.getApplicationInfo().flags
                            & ApplicationInfo.FLAG_HARDWARE_ACCELERATED) != 0) {
                // 如果没有父Window并且应用开启了硬件加速,就设置该Window开启硬件加速
                wparams.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
            }
        }
        
        ViewRootImpl root;
        View panelParentView = null;
        // 先上锁
        synchronized (mLock) {
            if (mSystemPropertyUpdater == null) {
                // 赋值一个Runnable,用来遍历更新所有ViewRootImpl的有关参数
                mSystemPropertyUpdater = new Runnable() {
                    @Override public void run() {
                        synchronized (mLock) {
                            for (int i = mRoots.size() - 1; i >= 0; --i) {
                                mRoots.get(i).loadSystemProperties();
                            }
                        }
                    }
                };
                // 添加到执行队列中
                SystemProperties.addChangeCallback(mSystemPropertyUpdater);
            }
            
            // 看需要add的view是否已经在mViews中
            int index = findViewLocked(view, false);
            if (index >= 0) {
                // 如果被添加过,就看是否在死亡队列里也存在
                if (mDyingViews.contains(view)) {
                    // 如果存在,就将这个已经存在的view对应的window移除
                    mRoots.get(index).doDie();
                } else {
                    // 否则,说明view已经被添加,不需要重新添加了
                    throw new IllegalStateException("View " + view
                            + " has already been added to the window manager.");
                }
            }
            
            // 如果属于子Window层级
            if (wparams.type >= WindowManager.LayoutParams.FIRST_SUB_WINDOW &&
                    wparams.type <= WindowManager.LayoutParams.LAST_SUB_WINDOW) {
                final int count = mViews.size();
                // 遍历ViewRootImpl,看是否存在一个Window的IBinder对象和需要添加的Window的token一致,之后赋值引用
                for (int i = 0; i < count; i++) {
                    if (mRoots.get(i).mWindow.asBinder() == wparams.token) {
                        panelParentView = mViews.get(i);
                    }
                }
            }
            
            // 新创建一个ViewRootImpl
            root = new ViewRootImpl(view.getContext(), display);
            // 给需要添加的View设置params
            view.setLayoutParams(wparams);
            // 将三个参数加入三个集合中
            mViews.add(view);
            mRoots.add(root);
            mParams.add(wparams);
            
            try {
                // 调用ViewRootImpl的setView(),这个方法会调用开始ViewRootImpl的performTraversals()
                root.setView(view, wparams, panelParentView);
            } catch (RuntimeException e) {
                if (index >= 0) {
                    removeViewLocked(index, true);
                }
                throw e;
            }
        }
    }
    

    可以看到主要做了如下操作:(参考图解)
    1、检查参数是否合法,如果是子window还需要调整布局参数
    2、创建ViewRootImpl对象,并将view添加到列表
    3、通过ViewRootImpl的setView来完成window的添加过程
    ps:通过view的事件体系我们知道view的绘制过程是由ViewRootImpl来完成的,这里当然不例外。setView内部调用requestLayout方法来完成异步刷新请求,requestLayout内部的scheduleTraversals就是view绘制入口。接着通过WindowSession来完成window的添加过程

    ViewRootImpl的setView源码
    public void setView(View view, WindowManager.LayoutParams attrs, View panelParentView) {
        synchronized (this) {
            if (mView == null) {
                // ......
                mAdded = true;
                int res;
                // 内部调用提交一个更新界面的Runnable去执行performTraversals()
                requestLayout();
                // ......
                try {
                    mOrigWindowType = mWindowAttributes.type;
                    mAttachInfo.mRecomputeGlobalAttributes = true;
                    collectViewAttributes();
                    // IPC调用,调用WindowManagerService去处理
                    res = mWindowSession.addToDisplay(mWindow, mSeq, mWindowAttributes,
                            getHostVisibility(), mDisplay.getDisplayId(),
                            mAttachInfo.mContentInsets, mAttachInfo.mStableInsets,
                            mAttachInfo.mOutsets, mInputChannel);
                } // ......
            }
        }
    }
    
    window添加过程流程图

    在这里插入图片描述

    2、window的删过程

    通过上面我们知道删除过程也是WindowManagerGlobal 来接管的。源码如下:

    public void removeView(View view, boolean immediate) {
        // 判空
        if (view == null) {
            throw new IllegalArgumentException("view must not be null");
        }
        // 上锁
        synchronized (mLock) {
            // 获取需要移除的对象在顶级View集合中的下标
            int index = findViewLocked(view, true);
            // 获得需要移除对象的Window的顶级View
            View curView = mRoots.get(index).getView();
            // 删除逻辑
            removeViewLocked(index, immediate);
            // 如果是同一个对象,就返回
            if (curView == view) {
                return;
            }
            // 如果不是,抛出一个异常,删除的View不是Window的顶级View
            throw new IllegalStateException("Calling with view " + view
                    + " but the ViewAncestor is attached to " + curView);
        }
    }
    

    逻辑清晰:首先通过findViewLocked来查找待删除view的索引。
    然后调用removeViewLocked来做进一步的删除工作。(源码如下)

    private void removeViewLocked(int index, boolean immediate) {
        ViewRootImpl root = mRoots.get(index);
        View view = root.getView();
    
        if (view != null) {
            InputMethodManager imm = InputMethodManager.getInstance();
            if (imm != null) {
                // 关闭输入法软键盘
                imm.windowDismissed(mViews.get(index).getWindowToken());
            }
        }
        // 调用die去进行删除操作
        // immediate参数指是否使用同步删除
        boolean deferred = root.die(immediate);
        if (view != null) {
            view.assignParent(null);
            if (deferred) {
                // 加入死亡集合
                mDyingViews.add(view);
            }
        }
    }
    

    这里创建了ViewRootImpl 对象具体的删除操作还是由ViewRootImpl 对象的die方法来完成
    注意:die方法传递参数 false表示异步删除,true表示同步删除。
    我们继续看die的源码:

    boolean die(boolean immediate) {
        // 如果是同步并且没有正在执行traversal
        if (immediate && !mIsInTraversal) {
            // 直接调用删除
            doDie();
            // 返回false表示没有排队,立即执行删除了。
            return false;
        }
        if (!mIsDrawing) {
            // 如果不在绘制流程中,就关掉硬件加速
            destroyHardwareRenderer();
        } else {
            Log.e(mTag, "Attempting to destroy the window while drawing!\n" +
                    "  window=" + this + ", title=" + mWindowAttributes.getTitle());
        }
        // 给ViewRootImpl发送一个MSG_DIE消息
        mHandler.sendEmptyMessage(MSG_DIE);
        return true;
    }
    

    如果是同步调用doDie处理,立即删除。
    如果是异步发送MSG_DIE消息给ViewRootImpl的Handler,handleMessage()中也是调用doDie处理
    doDie源码:

    void doDie() {
        checkThread();
        if (LOCAL_LOGV) Log.v(mTag, "DIE in " + this + " of " + mSurface);
        synchronized (this) {
            if (mRemoved) {
                return;
            }
            mRemoved = true;
            if (mAdded) {
                dispatchDetachedFromWindow();
            }
            // ......
            mAdded = false;
        }
        WindowManagerGlobal.getInstance().doRemoveView(this);
    }
    

    可以看到主要调用两个方法:dispatchDetachedFromWindow、doRemoveView

    dispatchDetachedFromWindow源码:

    void dispatchDetachedFromWindow() {
        if (mView != null && mView.mAttachInfo != null) {
            // 调用监听的onXXX()回调方法
            mAttachInfo.mTreeObserver.dispatchOnWindowAttachedChange(false);
            mView.dispatchDetachedFromWindow();
        }
        
        mAccessibilityInteractionConnectionManager.ensureNoConnection();
        
        // 移除回调
        mAccessibilityManager.removeAccessibilityStateChangeListener(
                mAccessibilityInteractionConnectionManager);
        mAccessibilityManager.removeHighTextContrastStateChangeListener(
                mHighContrastTextManager);
        removeSendWindowContentChangedCallback();
        // 移除硬件加速
        destroyHardwareRenderer();
        
        // 将数据置为null或释放
        setAccessibilityFocus(null, null);
        mView.assignParent(null);
        mView = null;
        mAttachInfo.mRootView = null;
        mSurface.release();
        if (mInputQueueCallback != null && mInputQueue != null) {
            mInputQueueCallback.onInputQueueDestroyed(mInputQueue);
            mInputQueue.dispose();
            mInputQueueCallback = null;
            mInputQueue = null;
        }
        if (mInputEventReceiver != null) {
            mInputEventReceiver.dispose();
            mInputEventReceiver = null;
        }
        try {
            // IPC调用WindowManagerService删除Window
            mWindowSession.remove(mWindow);
        } catch (RemoteException e) {
        }
        
        // 切断和远程通信
        if (mInputChannel != null) {
            mInputChannel.dispose();
            mInputChannel = null;
        }
        // 取消监听
        mDisplayManager.unregisterDisplayListener(mDisplayListener);
        // 移除消息队列中准备执行traversals的Runnable
        unscheduleTraversals();
    }
    

    doRemoveView源码:

    void doRemoveView(ViewRootImpl root) {
        synchronized (mLock) {
            final int index = mRoots.indexOf(root);
            if (index >= 0) {
                mRoots.remove(index);
                mParams.remove(index);
                final View view = mViews.remove(index);
                mDyingViews.remove(view);
            }
        }
        if (ThreadedRenderer.sTrimForeground && ThreadedRenderer.isAvailable()) {
            doTrimForeground();
        }
    }
    

    dispatchDetachedFromWindow和doRemoveView主要做了四件事:
    1、垃圾回收相关工作,比如清除数据消息,移除回调
    2、通过Session的remove方法删除view,这是个ipc过程,最终是远程调用WindowManagerService的removeWindow()
    3、调用view对象的dispatchDetachedFromWindow(),内部调用view的onDetachedFromWindow()完成回收工作
    4、调用windowManagerGloba的doRemoveView刷新数据,包括mRoots,mParams,mDyingViews,将当前view所关联三类对象从列表删除

    window删除view的流程图

    在这里插入图片描述

    3、window的更新操作

    WindowManagerGlobal的updateViewLayout

    public void updateViewLayout(View view, ViewGroup.LayoutParams params) {
        // 检查参数
        if (view == null) {
            throw new IllegalArgumentException("view must not be null");
        }
        if (!(params instanceof WindowManager.LayoutParams)) {
            throw new IllegalArgumentException("Params must be WindowManager.LayoutParams");
        }
        
        final WindowManager.LayoutParams wparams = (WindowManager.LayoutParams)params;
        // 给View设置新的参数
        view.setLayoutParams(wparams);
        synchronized (mLock) {
            int index = findViewLocked(view, true);
            ViewRootImpl root = mRoots.get(index);
            // 移除之前这个view的Params
            mParams.remove(index);
            // 加入新的
            mParams.add(index, wparams);
            // 给ViewRootImpl设置新的参数
            root.setLayoutParams(wparams, false);
        }
    }
    

    1、首先更新view的LayoutParams ,替换老的布局参数。
    2、创建ViewRootImpl 对象更新ViewRootImpl 的布局参数
    3、ViewRootImpl 的setLayoutParams内部通过,scheduleTraversal来重新完成view的测量布局重绘三个过程。还通过windowSession来完成window的视图更新。

    流程图如下

    在这里插入图片描述

    五、小结

    这里主要总结了下window添加删除更新view的情况,下节总结下各种window的创建

    参考文章:https://www.jianshu.com/p/7e589ddb634a

    The end

    本文来自<安卓开发艺术探索>笔记总结
    下篇:理解Window和WindowManager(二)三种window的创建过程

    展开全文
  • 前不久不知道是对Windows做了什么操作,最近老是提示windows installer 安装,并且这个提示框一直也关不了,哈哈,可能是有强迫症,便折腾了一波,终于解决了。 我使用的是一个叫做Windows Install...安装好之后选择...

    前不久不知道是对Windows做了什么操作,最近老是提示windows installer 安装,并且这个提示框一直也关不了,哈哈,可能是有强迫症,便折腾了一波,终于解决了。
    我使用的是一个叫做Windows Install Clean Up的软件,下载地址:https://windows-installer-cleanup-utility.softonic.cn/download
    安装好之后选择哪个总是提示的程序,并且remove就行了。
    在这里插入图片描述

    展开全文
  • windows下面的nc命令

    千次阅读 2019-06-14 03:28:28
    2019独角兽企业重金招聘Python工程师标准>>> ...

    https://eternallybored.org/misc/netcat/

    nc -l -p [Port] < [infile]
    

    美中不足,不能自动结束

    其他下载地址: https://joncraton.org/blog/46/netcat-for-windows/ https://github.com/diegocr/netcat

    转载于:https://my.oschina.net/yx91490/blog/1798987

    展开全文
  • 30多年可以把一个人变成什么样子?微软的比尔盖茨给出了一个最好的答案。 同样的,作为一款历经30多年风雨的操作系统,可以说,Windows发展的30多年,其实就是整个计算机应用,从小众化向大众化消费领域,快速前行的...
  • window.a和var a的区别

    千次阅读 2018-05-10 14:20:49
    首先window是一个全局对象。先看一下结果:相同情况:var a = 1 //function(){console.log(this)}window.a = 2 //function(){console.log(this)}测试结果 constructor和proto和this指向(window)都一样不同情况:...
  • Js中的window.parent ,window.top,window.self 详解

    万次阅读 多人点赞 2010-12-01 14:36:00
    在应用有frameset或者iframe的页面时,parent是父...语法:window.self注:window、self、window.self是等价的。window.top功能:返回顶层窗口,即浏览器窗口。语法:window.top注:如果窗口本身就是顶层窗口,top属
  • window.location.href刷新页面

    万次阅读 2015-09-09 09:23:46
    window.location.href=window.location.href; 或者 window.location.href="当前URL",例如 window.location.href="http://www.hao123.com/indexnt.html"; PS:如果不考虑window.location.href,可以直接...
  • window.open()参数传递及获取

    万次阅读 多人点赞 2016-10-21 23:27:19
    20161021 1、带参数打开新窗口 ...$window.open("/bdfence/bdfence-division/bdfence.html?vehicleId="+ id );...var afterUrl = window.location.search.substring(1);(问号以后的字符串) var afterE
  • JS中window.alert()与alert()的区别 alert与window.alert没什么区别,如果有人觉得有区别,那就来解释一下:所有以window.开始的语句,都可以直接把window省略。只是在有些软件中,由于其编译器特性,当你写了window....
  • window.scrollTop()设置失效问题

    万次阅读 2018-02-17 09:32:45
    window.scrollTop()设置失效问题body没有添加高度,window.scrollTop()设置失效。
  • window location跳转

    万次阅读 2019-06-20 10:38:56
    "top.location.href"是最外层的页面跳转 ...location是window对象的属性,而所有的网页下的对象都是属于window作用域链中(这是顶级作用域),所以使用时是可以省略window。而top是指向顶级窗口对象,parent...
  • window.screen.availWidth 返回当前屏幕宽度(空白空间) window.screen.availHeight 返回当前屏幕高度(空白空间) window.screen.width 返回当前屏幕宽度(分辨率值) window.screen.height 返回当前屏幕高度...
  • 查了一下stackoverflow 上面的代码好像是错误的 我改成了 window.getHeight= function(){ if(window.innerHeight!= undefined){ return window.innerHeight;
  • 用wireshark进行协议分析时经常会遇到专家系统提示:window is full 和 window is zero的提示,到底它们有什么不同呢?
  • JavaScript使用Window Location进行页面跳转概述​ 在Web开发中,常有页面跳转的需要,跳转页面的方式也有很多种,不过这里仅介绍使用window.location的方法,这种方法既可以用于具有onclick事件的标签,也可以用于...
  • window的onload事件的用法

    万次阅读 2018-09-13 17:15:23
    1.最简单的用法 ...3.window.onload()的加载问题 由于HTML加载时由上往下的,在HTML加载的时候,遇到function关键字,声明一个函数的时候,就会在内存中开辟一个新的空间来对函数进行存储,方便以...
  • window中reload()和location区别

    万次阅读 2008-12-11 15:21:00
    window.location.Reload()应该是刷新.【相当于 按页面刷新按钮】(如果有数据提交的话,会提示是否提交的(是和否选项)) window.location.href=window.location.href; 是定向url提交数据 他们最大区别是 是否有数据...
  • window.opener方法的使用 刷新父页面

    万次阅读 2016-07-13 14:22:02
    刷新打开(window.open)此窗口的父窗口 window.opener.location.href = 'http://www.baidu.com'; window.opener.location.reload; 调用打开(window.open)此窗口的父窗口中的函数 window.opener.connect_callback();...
  • 打开复合查询,填入如下信息,记得选择PUT方式提交,credit_trace_data改为本索引库中的索引,max_result_window设为20亿,此值是integer类型,不能无限大 http://127.0.0.1:9200/ PUT    credit_
1 2 3 4 5 ... 20
收藏数 1,677,081
精华内容 670,832
关键字:

window