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)
}