Javascript 右键单击链接时window.opener为空

Javascript 右键单击链接时window.opener为空,javascript,html,jsp,window.opener,cross-origin-opener-policy,Javascript,Html,Jsp,Window.opener,Cross Origin Opener Policy,我正在使用javascriptwindow.opener属性刷新子窗口中的父窗口 父窗口只包含一个带有数据的表和一个到子窗口的链接,当打开子窗口时,然后使用窗口执行父窗口中的js函数。opener属性,父窗口中的js函数使用ajax刷新表 问题在于window.opener,因为当用户打开链接时,它为NULL 使用右键单击(上下文菜单) 例如: parent.jsp 函数刷新表(){ //刷新#theTable表的ajax代码,对于这个问题并不重要 } ... child.jsp $(文档

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

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

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

例如:

parent.jsp

函数刷新表(){
//刷新#theTable表的ajax代码,对于这个问题并不重要
}
...
child.jsp

$(文档).ready(函数(){
//右键单击打开子对象时,打开器为空
window.opener.refreshttable();
});
...          

根据您的要求,您始终可以在
child.jsp
页面中设置
窗口.opener

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

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

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

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

指向target=“\u blank”链接


开场白将通过子页面传递

基于

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

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

  • 在Firefox79中,windows打开是因为链接的目标是 _blank不获取开启器,除非使用rel=opener显式请求

  • 具有值为的跨来源开启器策略标头 同一原点防止设置开启器。因为新窗口已加载 在不同的浏览上下文中,它不会引用 打开窗户


旁注:顺便说一句,如果你用鼠标右键或左键打开一个页面,没有什么区别。

好的,我知道已经很晚了,但我把这个留在这里供将来使用

指向target=“\u blank”链接


开场白将通过子页面传递

基于

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

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

  • 在Firefox79中,windows打开是因为链接的目标是 _blank不获取开启器,除非使用rel=opener显式请求

  • 具有值为的跨来源开启器策略标头 同一原点防止设置开启器。因为新窗口已加载 在不同的浏览上下文中,它不会引用 打开窗户


旁注:顺便说一句,如果你用鼠标右键或左键打开一个页面,没有什么区别

谢谢你的回答!我只需要一些对父窗口对象的引用来刷新父窗口中的表,这是我的要求,当用户左键单击链接时,一切正常。。。但如果用户在链接上单击鼠标右键(“在新选项卡中打开”),则子窗口中对父项的引用为空。@AndrewSullivan不客气。是的,只需在child.jsp中设置
window.opener
值,然后调用
refreshttable()
,就可以了。我认为该解决方案行不通,因为我需要一个对window对象实例的引用,使用该赋值,您只需将字符串属性初始化为全局窗口对象,而不是对父窗口的引用。只是一个字符串,而不是对打开窗口的引用。谢谢您的回答!我只需要一些对父窗口对象的引用来刷新父窗口中的表,这是我的要求,当用户左键单击链接时,一切正常。。。但如果用户在链接上单击鼠标右键(“在新选项卡中打开”),则子窗口中对父项的引用为空。@AndrewSullivan不客气。是的,只需在child.jsp中设置
window.opener
值,然后调用
refreshttable()
,就可以了。我认为该解决方案行不通,因为我需要一个对window对象实例的引用,使用该赋值,您只需将字符串属性初始化为全局窗口对象,而不是对父窗口的引用。只是一个字符串,而不是对opener窗口的引用。
<a href="/folder/child.jsp" target="_blank" rel="opener">OpenChild</a>