繁体   English   中英

用户关闭弹出窗口后如何刷新父窗口?

[英]How to refresh parent window after user closes popup window?

SO上有很多完全相似的问题,但是没有一个给出正确的答案,因此迫使我将其作为一个新问题提出。 在将我的问题标记为重复之前,请先考虑这一点。

我尝试了其他问题中发布的答案,但没有一个对我有效。 这是我的代码:

在父窗口中:

  <a href="createfolder.htm" onClick="return popup(this, 'createfolder', 600, 200);">Create new folder</a>

在Javascript文件中:

function popupClosed() {
  //alert('About to refresh');
  window.location.href = window.location.href;
 //window.opener.location.reload();
}

function popup(mylink, windowname, w, h)
{
  //if (! window.focus) return true;
  var href;
  if (typeof(mylink) == 'string')
    href = mylink;
  else
    href = mylink.href;

  var left = (window.innerWidth/2)-(w/2);
  var top = (window.innerHeight/2)-(h/2);

  var win = window.open(href, windowname, 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width='+w+', height='+h+', top='+top+', left='+left);

  win.onunload = function() {
    popupClosed();
  }

  return false;
}

我遇到的问题是,一旦单击链接,它就会刷新父窗口-这是不希望的。 关闭弹出窗口后,它也会刷新父窗口。 但是,我想避免单击链接时发生刷新。

我不知道他们是否更改过它,但是在过去,该窗口没有要调用的事件,因此您必须开始一个时间间隔并检查closed状态。

var win = window.open('http://www.google.com','google','width=800,height=600,status=0,toolbar=0');   
var timer = setInterval(function() {   
    if(win.closed) {  
        clearInterval(timer);  
        alert('closed');  
    }  
}, 1000);

资料来源: https : //stackoverflow.com/a/15769630/2424541

您可以刷新页面,而不用发出警报。

window.location.reload();

另外,如果要阻止锚的href部分将您定向到页面,则还必须阻止默认行为。 您可以执行以下操作:

<a href="createfolder.htm" id="popopener" onClick="return popup(this, 'createfolder', 600, 200);">Create new folder</a>

<script>
    document.getElementById('popopener').onclick = function(e) {
        e.preventDefault();
    }
</script>

在这一部分,您可以删除“ onClick”部分并将其放在e.preventDefault();e.preventDefault(); 部分。 这比使用onClick更干净。

您应该通过event.preventDefault();禁用链接的默认click事件行为event.preventDefault();

编辑:

<a href="createfolder.htm" onClick="return popup(event, this, 'createfolder', 600, 200);">Create new folder</a>


function popup(event, mylink, windowname, w, h)
{
  event.preventDefault();
  if (! window.focus) return true;
  var href;
  if (typeof(mylink) == 'string')
    href = mylink;
  else
    href = mylink.href;

  var left = (window.innerWidth/2)-(w/2);
  var top = (window.innerHeight/2)-(h/2);

  var win = window.open(href, windowname, 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width='+w+', height='+h+', top='+top+', left='+left);

  win.onunload = function() {
      window.parent.popupClosed();
  };

  return false;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM