Javascript 如何以编程方式检测浏览器如何处理window.close()?
不同的web浏览器处理window.close()函数的方式不同。IE会提示用户进行确认,而Firefox和Safari则无法执行,除非该窗口最初是用Javascript打开的,并在控制台中显示一条消息,说明同样的内容 我支持的组织内部使用的第三方web应用程序在一系列类似向导的页面末尾显示“关闭”按钮。这对IE很有效,IE是我们大多数用户使用的。然而,这在FF中显然是失败的。我更愿意保留该按钮,并使用Javascript通过在任何不执行window.close()的浏览器中不显示该按钮来优雅地降低UIJavascript 如何以编程方式检测浏览器如何处理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()的浏览器中不显示该按钮来优雅地
根据经验,我尝试检查浏览器功能,而不是尽可能依赖基于浏览器检测的硬编码策略。是否有一种方法可以通过编程检查对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是的,你说得对。也许你可以让它成为启动屏幕或其他有用的东西。是的,我在考虑一个“配置”屏幕:)…但问题是你如何检查兼容性。