JavaScript可以在关闭时检测弹出窗口并重新打开吗?

时间:2016-03-01 20:27:42

标签: javascript dom

我有一个HTML页面,可以弹出一个应用程序的全屏窗口。我想要做的是检测弹出窗口何时关闭并重新打开它。

var drawingwindow;

function popup(url) 
{
 params  = 'width='+screen.width;
 params += ', height='+screen.height;
 params += ', top=0, left=0'
 params += ', fullscreen=yes';
 params += ', resizeable=no';
 newwin=window.open(url,'drawingwindow', params);
 if (window.focus) {newwin.focus()}
 return false;
}

然后我从HTML按钮触发弹出窗口

<input type="submit" name="submit" value="Submit" onclick="popup('hello.php')"/>

我想要做的是以某种方式检查绘图窗口的第一页 - 如果它关闭 - 立即重新打开它。它是主画布“drawingwindow”上绘图应用程序的一部分,它可以永久关闭绘图窗口。

1 个答案:

答案 0 :(得分:1)

最近浏览器安全方面的改进意味着你可以做得很好。

您可以检测到弹出窗口已关闭:

var popupWindow;
var pop = function () {
    popupWindow = window.open("example.html"); // has to be on same domain as original file
    // setting a popupWindow.onclose event doesn't work (it 
    // fires immediately).  You can fake it by observing some 
    // known property of the popup window, such as its location:
    var fakeOncloseEvent = window.setInterval(function () {
        if (!popupWindow.location) {
            // The popup was closed.
            window.clearInterval(fakeOncloseEvent); // tidy up 
            pop(); // <-- But this won't work!
        }
    }, 250);
}

在大多数浏览器中都会阻止重新打开弹出窗口,因为您只能通过直接用户操作(即点击)来打开新窗口。 (您可以使用上述内容指导用户自行重新打开弹出窗口,可能是通过突出显示&#34;打开弹出窗口&#34;链接,但您无法为他们打开它。)

或者你可以从另一端解决问题,并将代码放在弹出窗口中以防止它关闭。但是大多数浏览器严格限制您在onbeforeunload事件中允许执行的操作 - 您几乎只限于抛出确认对话框:

window.onbeforeunload = function() {
  // Just return the string, don't return a confirm() here.
  // Various browsers will include their own additional text 
  // in the confirm dialog, and some may ignore your added text altogether.
  return "Are you sure you want to close this beautiful popup?";
}