2014-04-28 147 views
0

我正在维护一个内部开发的XPages项目,并且有一个奇怪的问题。如果用户从“主页”页面开始并向下钻取到特定记录(即在单独的浏览器选项卡中打开的记录ID“9H4G7J”),然后开始更改,然后决定退出而不保存,方法是单击“退出”按钮的提示状态 - “你确定要离开这个页面吗?此文档可能包含未保存的更改“ - 并且当用户单击”好“时,”记录“选项卡关闭,用户使用先前的浏览器选项卡显示,并将记录的位置向下钻取到类别中。这是好事,这是我们想要的。XPages关闭浏览器

BUT,如果用户,而不是向下钻取,进入在“主页”屏幕上的搜索设备的记录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

等等!再次检查了这一点,其中一个区别是,当搜索一个记录ID然后单击该记录打开它时 - 这次它不会打开一个新的选项卡,而是记录显示在同一个浏览器选项卡中。 – AJF

回答

1

当应用程序打开一个新标签或新窗口的JavaScript调用window.close();关闭该选项卡或窗口。如果您在最后一个窗口打开时关闭,则浏览器关闭。要查看效果:打开一个打开新页面的其他选项卡(dilbert.com是个不错的选择)并查看效果。

为了使应用程序行为是一致的修改代码,要么始终打开(TARGET = _blank)或从不打开一个新的标签/窗口

如果我的应用程序打开新的标签我个人讨厌。如果我想要一个新标签,我可以在点击之前按住Ctrl键。但这是一个品味的问题,您的用户可能会喜欢自动新标签。只要让它一致

+0

是的。感谢stwissel。我发现通过搜索打开记录不会打开一个新的标签,例如通过向下钻取来查找记录。我不打算让这个记录在新窗口中打开,它的最终用户和其他人开发这个应用程序 - 我只是有维护它的任务。我现在试图找出如何在新的标签窗口中打开选定的记录。 – AJF

+0

将一个属性target =“_ blank”添加到显示的链接。 – stwissel

+0

发现了我们想要的方式工作的XPage在调用window.open命令的JS文件中使用名为tkDynamicViewPanelRowClick的Function。此外,XPage中工作的列不包含在dynamicViewPanel中,而是包含在普通的viewPanel中。 XPage我需要改变DOES使用动态视图面板,我试图模拟上述工作,但因为没有一致的列名称,我无法让它工作。 XPage更改HTML源代码是说“href =”routetonotesdocument; action = editDocument“class =”xspLinkViewColumn“>” - 如何让链接打开一个新页面? – AJF