右键单击 link window.opener 为 NULL

window.opener is NULL with right click on link

我正在使用 javascript window.opener 属性 刷新子 window 中的父 window =].

父 window 只包含一个 table 数据和一个 link 给子 window,当子 window 打开然后执行父级中的 js 函数使用 window.opener 属性,父级中的 js 函数使用 ajax 刷新 table。

问题出在 window.opener 因为当用户打开 link 时为 NULL 使用右键单击(上下文菜单)。

示例:

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>

根据您的要求,您可以随时在 child.jsp 页面中设置 window.opener

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

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

添加

rel="opener" 

到目标="_blank" link

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

开启者将通过child页面

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

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

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

  • 从 Firefox 79 开始,windows 由于 link 目标打开 _blank 没有开场白,除非使用 rel=opener 明确要求。

  • 有一个 Cross-Origin-Opener-Policy header 的值为 same-origin 阻止设置开启者。由于加载了新的 window 在不同的浏览上下文中,它不会引用 开幕式 window.

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