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



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

我支持的一个在我们公司内部使用的第三方web应用程序在一系列类似向导的页面的末尾显示一个"关闭"按钮。这对于我们大多数用户使用的IE来说效果很好。然而,这在FF中显然是失败的。我更愿意留下按钮,并使用Javascript通过不显示该按钮在任何浏览器中不会执行window.close()优雅地降低UI。

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

试试这个:

演示: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

为什么不检查兼容性,如果兼容,然后追加?使用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是跨浏览器兼容的,它应该

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

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

相关内容

最新更新