zoukankan      html  css  js  c++  java
  • window.open打开新窗口left不生效以及父子界面交互传参

    今天做个功能,通过window.open(url,'_blank','width=400, height=400, left=100, top=100') ,这样写在只有一个显示器的电脑上展示没有问题,新打开的窗口位置确实离左侧100px,但是放到有分屏的显示器上,就跑偏了,特此记录下解决方式,避免下次踩坑;

    解决代码如下:

    //screen.width=显示屏幕的宽度,就是您的Windows设置的分辨率,w变量值因为业务需要所以对大小屏做了个判断,可自行设置,一般默认1000就可以居中
    var w = screen.width < 1500 ? 870 : 1350;
     
    var x = (window.screenX || window.screenLeft || 0) + (screen.width - w) / 2;
     
    //因为window.open的第三个参数想要生效,需要在一个字符串中用逗号分隔,所以把left拼接在最后一个即可
    myWindow = window.open(URL, '_blank', 'height=400, width=400, top=170, menubar=no, scrollbars=no, resizable=no,location=no, status=no, left='+x);
     
    父子界面通信
    window.open父子界面通信有很多种方法,一般常用的就是地址栏传参,比如下面这种写法:
     
    第一种(父传子,子获取):
    //父界面
    window.open('module/index/his_video.html?startTime='+startTime+'&endTime='+endTime, '_blank', 'height=800, width=600, top=170, menubar=no, scrollbars=no, resizable=no,location=no, status=no, left=100');
     
    //子界面
     
    /**首先定义方法解析参数**/
    function getSearch(str) {
    if (!str) return;
    str = decodeURI(str);//这个方法是给URL进行解析,解决中文乱码问题
    str = str.slice(1);
    let arr = str.split("&");
    for (let i = 0; i < arr.length; i++) {
    arr[i] = arr[i].split("=");
    publicVar[arr[i][0]] = arr[i][1];
    }
    return publicVar;
    }
     
    //执行就可以拿到对应参数值
    getSearch(location.search);
     
     
    第二种(子去拿父):
     
    //父界面定义隐藏域存值
    <input type="hidden"  value="" id="historyEventList">
     
    //子界面取值
    opener.document.getElementById("historyEventList").value;
     
    //子界面去调用父界面相关方法
    opener.方法名()
     
    好了记录就到这,后续有问题再沟通吧;
  • 相关阅读:
    【反射】Java反射机制
    Composer教程之常用命令
    Composer教程之基础用法
    Composer教程之初识Composer
    Composer 的结构详解
    现代 PHP 新特性系列(七) —— 内置的 HTTP 服务器
    现代 PHP 新特性系列(一) —— 命名空间
    现代 PHP 新特性系列(二) —— 善用接口
    现代 PHP 新特性系列(三) —— Trait 概览
    现代 PHP 新特性系列(四) —— 生成器的创建和使用
  • 原文地址:https://www.cnblogs.com/fmixue/p/13966451.html
Copyright © 2011-2022 走看看