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

Javascript 如何以编程方式检测浏览器如何处理window.close()?,javascript,browser,browser-detection,browser-feature-detection,Javascript,Browser,Browser Detection,Browser Feature Detection,不同的web浏览器处理window.close()函数的方式不同。IE会提示用户进行确认,而Firefox和Safari则无法执行,除非该窗口最初是用Javascript打开的,并在控制台中显示一条消息,说明同样的内容 我支持的组织内部使用的第三方web应用程序在一系列类似向导的页面末尾显示“关闭”按钮。这对IE很有效,IE是我们大多数用户使用的。然而,这在FF中显然是失败的。我更愿意保留该按钮,并使用Javascript通过在任何不执行window.close()的浏览器中不显示该按钮来优雅地

不同的web浏览器处理window.close()函数的方式不同。IE会提示用户进行确认,而Firefox和Safari则无法执行,除非该窗口最初是用Javascript打开的,并在控制台中显示一条消息,说明同样的内容

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


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

非常简单。您的脚本应尝试(或
try
)打开
窗口。关闭
,如果在该尝试后仍处于活动状态,则显示消息,并可选择性地删除/替换页面内容,或使用
位置。重新加载
,以避免用户有任何理由再停留在页面上

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

试试这个:

演示:

脚本:

函数hasClose(){
var关闭=窗口打开(“”,,“高度=100,宽度=100,左侧=3500',假);
close.close();
返回关闭。关闭;
};
if(hasClose()){
//显示按钮
}否则{
//隐藏按钮
};

注意:如果弹出窗口被阻止,则
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>

$(文档).on(“准备就绪”),(函数(e)
{
$(“正文”)。追加(“

”); $('#windowcloser')。单击(函数(){ window.close(); }); }) );

因为jQuery是跨浏览器兼容的,所以它应该

我认为这是不可能的。您最好检查正在使用的浏览器-如果是IE,您可以假设window.close()可以工作。如果它是其他的,那么假设它不会工作。直到IE跟随其他浏览器而不能按预期工作。最好写信给web应用程序的开发人员,让他们修复它。我曾考虑过在按钮点击后检测窗口是否关闭,但我还是不想一开始就显示按钮。顺便说一句,在这种情况下,使用try/catch似乎没有什么帮助,因为IE和FF都不会对window.close()抛出异常。就不礼貌而言,虽然它通常是正确的,但也存在异常(类似于功能检测与浏览器检测方法)。这一切都是关于背景和管理期望。在这种情况下,web应用程序很少用于执行单个任务。它也可以在Windows登录屏幕上锁定的“信息亭模式”下使用。关闭浏览器将返回登录屏幕。正如Fitts定律所建议的,在内容下方的屏幕中央有一个大的“关闭窗口”按钮可能比kiosk浏览器在右上角的小X更直观。不幸的是,这可能会留下一个孤立的窗口,所以它仍然是一个陷阱。@pst是的,你说得对。也许你可以让它成为启动屏幕或其他有用的东西。是的,我在考虑一个“配置”屏幕:)…但问题是你如何检查兼容性。