0

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

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

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

例子:

父.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>

子.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>
4

2 回答 2

2

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

添加

rel="opener" 

到 target="_blank" 链接

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

开启者将通过子页面传递

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

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

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

  • 从 Firefox 79 开始,由于目标为 _blank 的链接而打开的窗口不会获得开启程序,除非使用 rel=opener 明确请求。

  • 具有值为 same-origin 的 Cross-Origin-Opener-Policy 标头可防止设置 opener。由于新窗口是在不同的浏览上下文中加载的,因此它不会引用打开的窗口。

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

于 2021-02-02T11:17:37.133 回答
0

根据您的要求,您始终可以window.openerchild.jsp页面中设置:

window.opener="https://www.google.com/";
于 2016-08-05T15:14:46.057 回答