window.opener为NULL,右键单击链接

时间:2016-08-05 14:53:00

标签: javascript html5 jsp

我正在使用javascript window.opener 属性刷新子窗口中的父窗口。

父窗口只包含一个包含数据的表和一个指向子窗口的链接,当子窗口打开后,使用 window.opener 属性在js中执行js函数,js父进程中的函数使用ajax刷新表。

问题在于 window.opener ,因为当用户打开链接时为NULL 使用右键单击(contextmenu)。

示例:

parent.jsp

<html>
    <head>
       <script type="text/javascript">
              function refreshTable() {
                 // ajax code to refresh the #theTable table, not important for this question
              }
       </script>
    </head>

    <body>
       <a href="/folder/child.jsp" target="_blank">OpenChild</a> 
       <table id="theTable">
           <tr>
            <td>...</td>
          </tr> 
       </table>
    </body> 
</html>

child.jsp

<html>
        <head>
           <script type="text/javascript">
                  $(document).ready( function() {
                     // opener is NULL when child is opened with right click
                     window.opener.refreshTable();

                  });
           </script>
        </head>
        <body>
            ...          
        </body> 
</html>

2 个答案:

答案 0 :(得分:2)

好吧,我知道已经晚了,但我把它留在这里以备将来使用

添加

rel="opener" 

到 target="_blank" 链接

<a href="/folder/child.jsp" target="_blank" rel="opener">OpenChild</a> 

opener 会通过子页面传递

基于https://developer.mozilla.org/en-US/docs/Web/API/Window/opener

在以下情况下,浏览器不会填充 window.opener,而是将其留空:

  • 可以通过在链接上指定 rel=noopener 来省略开启者,或者 在 windowFeatures 参数中传递 noopener。

  • 从 Firefox 79 开始,由于目标为 _blank 不获取开场白,除非使用 rel=opener 明确要求。

  • 具有值为以下的 Cross-Origin-Opener-Policy 标头 同源防止设置开瓶器。由于新窗口已加载 在不同的浏览上下文中,它不会引用 打开窗口。

旁注:顺便说一句,如果您使用右键或左键单击打开页面没有区别

答案 1 :(得分:0)

根据您的要求,您始终只需在window.opener页面中设置child.jsp

window.opener="https://www.google.com/";