窗口获取焦点,window.focus() 无效,求解决方法

2019-04-10 11:03发布

问题:

例如:
A页面中使用 window.open('B.html'); 在新窗口打开B页面;
B页面点击返回按钮,如果A页面窗口存在则给予A页面所在窗口焦点(即显示A窗口),如果A页面窗口不存在,则在新窗口打开
B页面js代码如下:
var Awin = null;//A 窗口对象
function GoBack() {
   if (Awin == null) {
      Awin = window.opener;//返回对创建此窗口的窗口的引用(A窗口对象)
   }
   if (Awin.closed) {
      Awin = window.open(Awin.location.href);
   }
   else {
      //方法1======
        Awin.focus();//无效
      //===========
      
      //方法2=======
        window.blur();
        setTimeout(Awin.focus, 0);//无效
      //============
//方法3======== Awin.alert('返回');//可行,但是体验不好 //============ } }
window.focus()   方法可把焦点给予一个窗口
在Chrome、FireFox、360浏览器、或者较高版本IE等等 无效
网上搜索提到用 setTimeout 延时执行可解决,经尝试还是没有效果
alert 提示信息就可以,但是用户体验不好

请问各位大神有什么好的解决方法,谢谢!

回答1:

在A中 为window定义名称(因为默认是空),然后在B打开此名称的窗口。代码如下:
页面A代码

    <script>
    window.name = '123'
    document.getElementById('test').addEventListener('click', function () {
        window.open('index2.html', 'mywindow');
    });

    document.getElementById('test2').addEventListener('click', function () {
        window.open('javascript:;', 'mywindow');
    });
</script>

页面B代码:

<script>
    document.getElementById('test').addEventListener('click', function () {
        window.open("javascript:;", window.opener.name);
    })
</script>


回答2:

window.open用户体验就是不好,建议不要用。你可以弹出一个div,div里面可以嵌套一个iframe



回答3:

setTimeout(Awin.focus(), 100);



回答4:

lz,请问这个问题解决了没有啊 ,我也遇到同样的需求同样的问题 , 研究了好久也没有找到完美的解决方案;可以相互分享下不