我正在使用javascript window.opener 属性刷新子窗口中的父窗口。
父窗口只包含一个包含数据的表和一个指向子窗口的链接,当子窗口打开后,使用 window.opener 属性在js中执行js函数,js父进程中的函数使用ajax刷新表。
问题在于 window.opener ,因为当用户打开链接时为NULL 使用右键单击(contextmenu)。
示例:
<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>
<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>
答案 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/";