今天我编写js代码时碰到了一个让我纠结了很久的小问题,在此记录一下当做笔记,

  这个问题就是:用谷歌浏览器,在我自己写的子窗口中用opener属性却获取不到父窗口的window对象。

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


 

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

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

 


 

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

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

 

 

 

  


 

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

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

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

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

原因是:“这是opener属性的缘故,但不是谷歌浏览器的兼容性问题,首先要知道js安全机制原则上是不能访问本地文件的,并且谷歌浏览器的安全设置级别比较高,认定你在"本地"应用opener属性的时候是通过js打开本地文件,所以操作被截止。但是,在实际开发环境中是不会产生这个问题的,因为当把页面文件部署到服务器上,通过谷歌浏览器输入  localhost/******   或者   127.0.0.1/******  访问该页面,是没有毛病的。——引用自https://blog.csdn.net/o_orick/article/details/73731464 ”

2018-05-08 17:48:33

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!

相关课程