我正在维护一个内部开发的XPages项目,并且有一个奇怪的问题。如果用户从“主页”页面开始并通过类别向下钻取到特定记录,即记录ID“9H4G7J”(在单独的浏览器选项卡中打开),然后开始更改,但随后决定退出而不保存,通过单击“退出”按钮提示状态 - “您确定要离开此页面吗?此文档可能包含未保存的更改“ - 当用户单击”确定“时,”记录“选项卡将关闭,用户将显示上一个浏览器选项卡,其中记录的位置将在类别中向下钻取。这很好,这就是我们想要的。
但是,如果用户不是向下钻取,而是在“主页”屏幕上的搜索工具中输入记录ID“9H4G7J”,然后开始更改并单击“退出”,同样的提示显示上面概述的但是当用户点击“确定”时,会显示第二个提示,指出“您正在查看的网页正在尝试关闭此窗口。你想关闭这个窗口吗?“ - 如果用户点击”是“,浏览器将完全关闭!任何人都可以解释为什么这样会有不同的表现吗?
这是Java代码;
private UIComponent createEventHandler(FacesContext context,
UIComponent parent, PageExpressionEvaluator evaluator) {
XspEventHandler result = new XspEventHandler();
result.setSubmit(false);
result.setEvent("onclick");
MethodBinding script = evaluator.createMethodBinding(result,
"if (XSP._isDirty()){\n if (confirm (\"Are you sure you want to navigate
away from this page?\" + \"\\n\" + \"\\n\" +\n \"This document may contain
unsaved changes.\" + \"\\n\" + \"\\n\" +\n \"Press OK to continue, or
Cancel to stay on the current page.\")){\n window.close();\n }else
{\n return false;\n }\n} else {\n window.close();\n}",
null,null, null);
result.setScript(script);
return result;
}
这是XPage“编辑”按钮的源代码;
<xp:button value="Exit" id="button2">
<xp:eventHandler event="onclick" submit="false">
<xp:this.script><![CDATA[if (XSP._isDirty()){
if (confirm ("Are you sure you want to navigate away from this page?" + "\n"
+ "\n" + "This document may contain unsaved changes." + "\n" + "\n" +
"Press OK to continue, or Cancel to stay on the current page.")){
window.close();
}else{
return false;
}
} else {
window.close();
}]]></xp:this.script>
</xp:eventHandler></xp:button>
提前致谢
答案 0 :(得分:1)
当应用程序打开新选项卡或新窗口时,JavaScript调用window.close();
将关闭该选项卡或窗口。如果您在最后一个窗口打开时发出关闭,浏览器将关闭。要查看效果:打开一个打开新页面的附加选项卡(dilbert.com是一个不错的选择)并查看效果。
要使您的应用程序行为保持一致,请将代码更改为始终打开(target = _blank)或永远不会打开新的选项卡/窗口
如果应用程序为我打开新标签,我个人很讨厌。如果我想要一个新选项卡,我可以在单击之前按住Ctrl键。但这是一个品味问题,您的用户可能会喜欢自动新标签。只需使其保持一致