13

不同的 Web 浏览器处理 window.close() 函数的方式不同。IE 提示用户进行确认,而 Firefox 和 Safari 只是无法兑现,除非窗口最初是用 Javascript 打开的,并在控制台中显示一条消息。

我支持在我们组织内部使用的第三方 Web 应用程序在类似向导的一系列页面的末尾显示一个“关闭”按钮。这适用于 IE,这是我们大多数用户使用的。但是,这显然在 FF 中失败了。我宁愿保留按钮并使用 Javascript 通过不在任何不会执行 window.close() 的浏览器中显示该按钮来优雅地降级 UI。

根据经验,我会尝试检查浏览器功能,而不是尽可能依赖基于浏览器检测的硬编码策略。有没有办法以编程方式检查对 window.close() 的支持,以便我可以确定是否应该首先显示按钮?

4

3 回答 3

2

尝试这个:

演示:http: //jsfiddle.net/ThinkingStiff/mnv87/

脚本:

function hasClose() {

    var close = window.open( '', '', 'height=100,width=100,left=3500', false );
    close.close();
    return close.closed;

};

if( hasClose() ) {
    //show button
} else {
    //hide button
};

如果弹出窗口被阻止,NotehasClose()也会返回。false

于 2011-10-29T01:15:58.907 回答
1

为什么不检查兼容性,如果兼容则追加?使用 jQuery:

<script type="text/javascript" src="latest_jquery_file.js"></script>
<script type="text/javascript">
  $(document).on("ready", (function(e)
  {
   $("body").append('<p><a href="#" id="windowcloser">Close The Window!!</a></p>');
      $('#windowcloser').click(function(){
         window.close();
      });
  })
  );
</script>

由于 jQuery 是跨浏览器兼容的,它应该

于 2012-04-22T02:25:49.463 回答
0

很简单。您的脚本应该尝试(或try)到window.close,如果在此之后它仍然存在,则尝试显示消息,并且可选地删除/替换页面内容,或者使用location.reload不再给您的用户任何停留在页面上的理由。

ps:请记住,从 JavaScript 关闭窗口是非常不礼貌的。所以你最好有一些很好的理由这样做;)

于 2011-10-25T17:48:00.923 回答