如何以编程方式检测浏览器如何处理window.close()?

时间:2011-10-24 21:30:45

标签: javascript browser browser-detection browser-feature-detection

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

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

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

3 个答案:

答案 0 :(得分: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
};

如果弹出窗口被阻止,注意hasClose()也会返回false

答案 1 :(得分: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是跨浏览器兼容的,它应该

答案 2 :(得分:0)

很简单。您的脚本应该尝试(或try)到window.close,如果它在尝试后仍然活着 - 显示消息,并且可选地删除/替换页面内容,或使用location.reload来不要让您的用户有任何理由留在页面上。

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