当window.opener无法调用时的原因与解决方案

window.opener在谷歌浏览器中提示window.opener… is not a function
使用框架angularJS

出错的原因:

症状:能弹出子页面没毛病,但问题是谷歌浏览器在子页面上点击选择按钮毫无反应,IE上需要通过允许,Firefox问题.

原因:是opener属性的缘故,但不是谷歌浏览器的兼容性问题,首先要知道js安全机制原则上是不能访问本地文件的,并且谷歌浏览器的安全设置级别比较高,认定你在"本地"应用opener属性的时候是通过js打开本地文件,所以操作被截止.

但是,在实际开发环境中是不会产生这个问题的,因为当把页面文件部署到服务器上,通过谷歌浏览器输入 localhost/****** 或者 127.0.0.1/****** 访问该页面,是没有毛病的。
转自:https://blog.csdn.net/o_orick/article/details/73731464?utm_source=itdadao&utm_medium=referral

个人点评:我尝试过,但就是不行
试验过,但不限于:

        window.opener.initSearch();
        var pwin = window.opener;
        pwin.document.getFlag(true);
        window.parent.$('.getCollectionPro').trigger('click');
        window.opener.getFlag(true);
        window.opener.location.search();
        window.opener.location.doSearch();
        window.opener.document.search();
        window.opener.search();
        window.parent.opener.search();
        window.opener.location.document.search().value=true;
        window.opener.location.reload();//该方法可行,把父页整体刷新,但不保留搜索条件

解决方案与思路
既然从子页调用父页不行,那么我反向,父页监听子页请求。当父页收到子页信号后,就执行doSearch();

子页代码

public backQuerylist() {
        localStorage.setItem('test', JSON.stringify('test'))
        window.close();
    }

父页代码

public change():void {//局部刷新
        setTimeout(() => {
            this.change()
            if (localStorage.getItem('test')) {
                this.doSearch()//调用查询功能
                localStorage.removeItem("test")
            }
        }, 0)
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值