js中window对象的opener属性的一个坑

时间:2024-01-09 17:53:02

2018-05-08 17:48:33

今天我编写代码碰到了一个让我纠结了很久的坑,特别想在此说一下,让其他人避免我踏过的这个坑。

这个坑就是:在我自己写的子窗口中用opener属性却获取不到父窗口的window对象。

现在已经解决这个坑,请看下文


这是父窗口(windows.html)的代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
  <input type="button" value="打开子窗口" onclick="show()" /><br/>
</body>
<script type="text/javascript" >
  function show(){
    window.open("user.html","","height=300,width=400","");
  }
</script>
</html>


这是子窗口(user.html)的代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
  <input type="button" value="弹出来" onclick="run()" /><br/>
</body>
<script type="text/javascript" >
  function run(){
    window.opener.alert("弹弹弹");
  }
</script>
</html>


不出意外的话,点击一下父窗口的button,会弹出子窗口,

然后再点击子窗口是button,父窗口中会出现一个弹窗(弹窗上写着弹弹弹三个字);

然而却父窗口却没有弹窗弹出来,接下来我在子窗口按f12看调试的时候,竟然说我没有获取到父窗口的引用。。。

纠结了好久之后,我换了另外一个浏览器火狐,却成功了。

解决这个坑的方法就是,千万不要用Chrome这个浏览器来运行这段代码(并非黑Chrome,本人很喜欢用Chrome,一直都在用),至于原因我也不太清楚。

网上搜了一下原因,好像说是本地file浏览器测试不要用chrome(webkit核心的浏览器),不能互相操作,具体原因大家可以自行百度,恕能力有限无法解答。